From 647f3cd0e0ff04f6f12a4b44c1d9169c282b0e86 Mon Sep 17 00:00:00 2001 From: Sarfaraz Nawaz Date: Mon, 23 Feb 2026 20:18:11 +0530 Subject: [PATCH 1/2] feat: Handle post delegation actions --- Cargo.lock | 551 ++++++++++------ Cargo.toml | 4 +- magicblock-account-cloner/src/lib.rs | 5 +- magicblock-chainlink/src/chainlink/errors.rs | 2 + .../chainlink/fetch_cloner/ata_projection.rs | 1 + .../src/chainlink/fetch_cloner/delegation.rs | 19 + .../src/chainlink/fetch_cloner/mod.rs | 64 +- .../src/chainlink/fetch_cloner/pipeline.rs | 41 +- magicblock-chainlink/src/cloner/mod.rs | 2 + test-integration/Cargo.lock | 620 ++++++++++++------ .../test-chainlink/src/ixtest_context.rs | 1 + 11 files changed, 884 insertions(+), 426 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 53c5b37cf..45c9239f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -65,7 +65,7 @@ dependencies = [ "solana-signature", "solana-transaction", "solana-transaction-status", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -375,7 +375,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -386,7 +386,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -564,7 +564,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -582,7 +582,7 @@ dependencies = [ "regex", "rustc-hash 2.1.1", "shlex", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -687,7 +687,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -797,7 +797,7 @@ checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -878,7 +878,7 @@ checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -962,7 +962,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1279,7 +1279,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1313,7 +1313,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1326,7 +1326,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1337,7 +1337,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1348,7 +1348,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core 0.23.0", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1403,7 +1403,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.111", + "syn 2.0.117", "unicode-xid", ] @@ -1435,7 +1435,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1523,7 +1523,7 @@ checksum = "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1648,6 +1648,15 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +[[package]] +name = "five8" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23f76610e969fa1784327ded240f1e28a3fd9520c9cec93b636fcf62dd37f772" +dependencies = [ + "five8_core", +] + [[package]] name = "five8_const" version = "0.1.4" @@ -1657,6 +1666,15 @@ dependencies = [ "five8_core", ] +[[package]] +name = "five8_const" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a0f1728185f277989ca573a402716ae0beaaea3f76a8ff87ef9dd8fb19436c5" +dependencies = [ + "five8_core", +] + [[package]] name = "five8_core" version = "0.1.2" @@ -1801,7 +1819,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1923,7 +1941,7 @@ checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2556,7 +2574,7 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2937,7 +2955,7 @@ dependencies = [ "magicblock-rpc-client", "rand 0.9.2", "solana-account", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-loader-v3-interface", "solana-loader-v4-interface", @@ -2963,7 +2981,7 @@ dependencies = [ "magicblock-committor-service", "magicblock-core", "magicblock-program", - "solana-hash", + "solana-hash 2.2.1", "solana-pubkey", "solana-transaction", "solana-transaction-error", @@ -3076,7 +3094,7 @@ dependencies = [ "solana-feature-set", "solana-fee-calculator", "solana-genesis-config", - "solana-hash", + "solana-hash 2.2.1", "solana-inline-spl", "solana-instruction", "solana-keypair", @@ -3086,7 +3104,7 @@ dependencies = [ "solana-pubkey", "solana-rent", "solana-rpc-client", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", "solana-signature", "solana-signer", "solana-system-program", @@ -3126,7 +3144,7 @@ dependencies = [ "solana-clock", "solana-commitment-config", "solana-feature-set", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-loader-v3-interface", @@ -3192,7 +3210,7 @@ dependencies = [ "solana-address-lookup-table-interface", "solana-commitment-config", "solana-compute-budget-interface", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-message", @@ -3245,7 +3263,7 @@ dependencies = [ "magicblock-magic-program-api", "solana-account", "solana-account-decoder", - "solana-hash", + "solana-hash 2.2.1", "solana-program", "solana-pubkey", "solana-signature", @@ -3264,24 +3282,30 @@ dependencies = [ [[package]] name = "magicblock-delegation-program" version = "1.1.3" -source = "git+https://github.com/magicblock-labs/delegation-program.git?rev=2cb491032f372#2cb491032f372faa4cfdb55e3f05cefd7e07351d" dependencies = [ "bincode", "borsh 1.6.0", "bytemuck", "const-crypto", + "curve25519-dalek 4.1.3", "num_enum", - "pinocchio", + "pinocchio 0.10.2", "pinocchio-log", "pinocchio-pubkey", "pinocchio-system", - "rkyv 0.7.45", + "rand 0.8.5", + "rkyv 0.7.46", + "serde", + "sha2 0.10.9", + "solana-address", "solana-curve25519", "solana-program", - "solana-security-txt", + "solana-sdk", + "solana-sha256-hasher 3.1.0", "static_assertions", "strum 0.27.2", - "thiserror 2.0.17", + "thiserror 1.0.69", + "x25519-dalek", ] [[package]] @@ -3304,7 +3328,7 @@ dependencies = [ "serde", "solana-account-decoder", "solana-clock", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-measure", @@ -3411,7 +3435,7 @@ dependencies = [ "solana-account-info", "solana-clock", "solana-fee-calculator", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-log-collector", @@ -3437,7 +3461,7 @@ dependencies = [ "solana-address-lookup-table-interface", "solana-clock", "solana-commitment-config", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-pubkey", "solana-rpc-client", @@ -3703,7 +3727,7 @@ checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3810,7 +3834,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3893,7 +3917,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3943,7 +3967,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3993,6 +4017,12 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pastey" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b867cad97c0791bbd3aaa6472142568c6c9e8f71937e98379f584cfb0cf35bec" + [[package]] name = "pbkdf2" version = "0.11.0" @@ -4022,7 +4052,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4067,7 +4097,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4088,6 +4118,19 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b971851087bc3699b001954ad02389d50c41405ece3548cbcafc88b3e20017a" +[[package]] +name = "pinocchio" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06810dac15a4ef83d3dabdb4f2f22fb39c9adff669cd2781da4f716510a647c" +dependencies = [ + "solana-account-view", + "solana-address", + "solana-define-syscall 4.0.1", + "solana-instruction-view", + "solana-program-error 3.0.0", +] + [[package]] name = "pinocchio-log" version = "0.5.1" @@ -4114,19 +4157,19 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0225638cadcbebae8932cb7f49cb5da7c15c21beb19f048f05a5ca7d93f065" dependencies = [ - "five8_const", - "pinocchio", + "five8_const 0.1.4", + "pinocchio 0.9.2", "sha2-const-stable", ] [[package]] name = "pinocchio-system" -version = "0.3.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "141ed5eafb4ab04568bb0e224e3dc9a9de13c933de4c004e0d1a553498be3a7c" +checksum = "24044a0815753862b558e179e78f03f7344cb755de48617a09d7d23b50883b6c" dependencies = [ - "pinocchio", - "pinocchio-pubkey", + "pinocchio 0.10.2", + "solana-address", ] [[package]] @@ -4200,7 +4243,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff24dfcda44452b9816fff4cd4227e1bb73ff5a2f1bc1105aa92fb8565ce44d2" dependencies = [ "proc-macro2", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4247,9 +4290,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -4262,7 +4305,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", "version_check", "yansi", ] @@ -4361,7 +4404,7 @@ dependencies = [ "prost 0.12.6", "prost-types 0.12.6", "regex", - "syn 2.0.111", + "syn 2.0.117", "tempfile", ] @@ -4381,7 +4424,7 @@ dependencies = [ "prost 0.13.5", "prost-types 0.13.5", "regex", - "syn 2.0.111", + "syn 2.0.117", "tempfile", ] @@ -4408,7 +4451,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4421,7 +4464,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4434,7 +4477,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4525,7 +4568,7 @@ checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4545,14 +4588,14 @@ checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "quote" -version = "1.0.42" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] @@ -4725,7 +4768,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4862,9 +4905,9 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.7.45" +version = "0.7.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +checksum = "2297bf9c81a3f0dc96bc9521370b88f054168c29826a75e89c55ff196e7ed6a1" dependencies = [ "bitvec", "bytecheck", @@ -4872,7 +4915,7 @@ dependencies = [ "hashbrown 0.12.3", "ptr_meta 0.1.4", "rend 0.4.2", - "rkyv_derive 0.7.45", + "rkyv_derive 0.7.46", "seahash", "tinyvec", "uuid", @@ -4898,9 +4941,9 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.7.45" +version = "0.7.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +checksum = "84d7b42d4b8d06048d3ac8db0eb31bcb942cbeb709f0b5f2b2ebde398d3038f5" dependencies = [ "proc-macro2", "quote", @@ -4915,7 +4958,7 @@ checksum = "bd83f5f173ff41e00337d97f6572e416d022ef8a19f371817259ae960324c482" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5251,7 +5294,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5316,7 +5359,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5341,7 +5384,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5549,7 +5592,7 @@ dependencies = [ "spl-token-2022 7.0.0", "spl-token-group-interface", "spl-token-metadata-interface", - "thiserror 2.0.17", + "thiserror 2.0.18", "zstd", ] @@ -5577,11 +5620,41 @@ checksum = "e0c17d606a298a205fae325489fbed88ee6dc4463c111672172327e741c8905d" dependencies = [ "bincode", "serde", - "solana-program-error", + "solana-program-error 2.2.2", "solana-program-memory", "solana-pubkey", ] +[[package]] +name = "solana-account-view" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f37ca34c37f92ee341b73d5ce7c8ef5bb38e9a87955b4bd343c63fa18b149215" +dependencies = [ + "solana-address", + "solana-program-error 3.0.0", +] + +[[package]] +name = "solana-address" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68c5d02824391b072dc5cd0aaa85fb0af9784a21d23286a767994d1e8a322131" +dependencies = [ + "borsh 1.6.0", + "bytemuck", + "bytemuck_derive", + "curve25519-dalek 4.1.3", + "five8", + "five8_const 1.0.0", + "serde", + "sha2-const-stable", + "solana-define-syscall 5.0.0", + "solana-program-error 3.0.0", + "solana-sha256-hasher 3.1.0", + "wincode", +] + [[package]] name = "solana-address-lookup-table-interface" version = "2.2.2" @@ -5621,7 +5694,7 @@ dependencies = [ "solana-pubkey", "solana-system-interface", "solana-transaction-context", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -5641,7 +5714,7 @@ checksum = "75db7f2bbac3e62cfd139065d15bcda9e2428883ba61fc8d27ccb251081e7567" dependencies = [ "num-bigint 0.4.6", "num-traits", - "solana-define-syscall", + "solana-define-syscall 2.2.1", ] [[package]] @@ -5662,8 +5735,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1a0801e25a1b31a14494fc80882a036be0ffd290efc4c2d640bfcca120a4672" dependencies = [ "blake3", - "solana-define-syscall", - "solana-hash", + "solana-define-syscall 2.2.1", + "solana-hash 2.2.1", "solana-sanitize", ] @@ -5678,8 +5751,8 @@ dependencies = [ "ark-ff", "ark-serialize", "bytemuck", - "solana-define-syscall", - "thiserror 2.0.17", + "solana-define-syscall 2.2.1", + "thiserror 2.0.18", ] [[package]] @@ -5713,7 +5786,7 @@ dependencies = [ "solana-cpi", "solana-curve25519", "solana-feature-set", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keccak-hasher", "solana-loader-v3-interface", @@ -5730,7 +5803,7 @@ dependencies = [ "solana-sbpf", "solana-sdk-ids", "solana-secp256k1-recover", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", "solana-stable-layout", "solana-system-interface", "solana-sysvar", @@ -5738,7 +5811,7 @@ dependencies = [ "solana-timings", "solana-transaction-context", "solana-type-overrides", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -5773,7 +5846,7 @@ dependencies = [ "solana-account", "solana-commitment-config", "solana-epoch-info", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-message", @@ -5806,7 +5879,7 @@ checksum = "7ace9fea2daa28354d107ea879cff107181d85cd4e0f78a2bedb10e1a428c97e" dependencies = [ "serde", "serde_derive", - "solana-hash", + "solana-hash 2.2.1", ] [[package]] @@ -5847,7 +5920,7 @@ dependencies = [ "solana-sdk-ids", "solana-svm-transaction", "solana-transaction-error", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -5904,9 +5977,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8dc71126edddc2ba014622fc32d0f5e2e78ec6c5a1e0eb511b85618c09e9ea11" dependencies = [ "solana-account-info", - "solana-define-syscall", + "solana-define-syscall 2.2.1", "solana-instruction", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "solana-stable-layout", ] @@ -5920,9 +5993,9 @@ dependencies = [ "bytemuck", "bytemuck_derive", "curve25519-dalek 4.1.3", - "solana-define-syscall", + "solana-define-syscall 2.2.1", "subtle", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -5940,6 +6013,18 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf784bb2cb3e02cac9801813c30187344228d2ae952534902108f6150573a33d" +[[package]] +name = "solana-define-syscall" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57e5b1c0bc1d4a4d10c88a4100499d954c09d3fecfae4912c1a074dff68b1738" + +[[package]] +name = "solana-define-syscall" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03aacdd7a61e2109887a7a7f046caebafce97ddf1150f33722eeac04f9039c73" + [[package]] name = "solana-derivation-path" version = "2.2.1" @@ -5984,7 +6069,7 @@ checksum = "86b575d3dd323b9ea10bb6fe89bf6bf93e249b215ba8ed7f68f1a3633f384db7" dependencies = [ "serde", "serde_derive", - "solana-hash", + "solana-hash 2.2.1", "solana-sdk-ids", "solana-sdk-macro", "solana-sysvar-id", @@ -5997,7 +6082,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c5fd2662ae7574810904585fd443545ed2b568dbd304b25a31e79ccc76e81b" dependencies = [ "siphasher", - "solana-hash", + "solana-hash 2.2.1", "solana-pubkey", ] @@ -6024,7 +6109,7 @@ dependencies = [ "serde_derive", "solana-address-lookup-table-interface", "solana-clock", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keccak-hasher", "solana-message", @@ -6032,7 +6117,7 @@ dependencies = [ "solana-pubkey", "solana-sdk-ids", "solana-system-interface", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6047,7 +6132,7 @@ dependencies = [ "solana-account", "solana-account-info", "solana-instruction", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "solana-rent", "solana-sdk-ids", @@ -6063,9 +6148,9 @@ dependencies = [ "ahash 0.8.12", "lazy_static", "solana-epoch-schedule", - "solana-hash", + "solana-hash 2.2.1", "solana-pubkey", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", ] [[package]] @@ -6110,7 +6195,7 @@ checksum = "b83f88a126213cbcb57672c5e70ddb9791eff9b480e9f39fe9285fd2abca66fa" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -6129,7 +6214,7 @@ dependencies = [ "solana-cluster-type", "solana-epoch-schedule", "solana-fee-calculator", - "solana-hash", + "solana-hash 2.2.1", "solana-inflation", "solana-keypair", "solana-logger", @@ -6138,7 +6223,7 @@ dependencies = [ "solana-pubkey", "solana-rent", "solana-sdk-ids", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", "solana-shred-version", "solana-signer", "solana-time-utils", @@ -6172,6 +6257,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "solana-hash" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8064ea1d591ec791be95245058ca40f4f5345d390c200069d0f79bbf55bfae55" + [[package]] name = "solana-inflation" version = "2.2.1" @@ -6205,11 +6296,23 @@ dependencies = [ "num-traits", "serde", "serde_derive", - "solana-define-syscall", + "solana-define-syscall 2.2.1", "solana-pubkey", "wasm-bindgen", ] +[[package]] +name = "solana-instruction-view" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60147e4d0a4620013df40bf30a86dd299203ff12fcb8b593cd51014fce0875d8" +dependencies = [ + "solana-account-view", + "solana-address", + "solana-define-syscall 4.0.1", + "solana-program-error 3.0.0", +] + [[package]] name = "solana-instructions-sysvar" version = "2.2.1" @@ -6219,7 +6322,7 @@ dependencies = [ "bitflags 2.10.0", "solana-account-info", "solana-instruction", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "solana-sanitize", "solana-sdk-ids", @@ -6234,8 +6337,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7aeb957fbd42a451b99235df4942d96db7ef678e8d5061ef34c9b34cae12f79" dependencies = [ "sha3", - "solana-define-syscall", - "solana-hash", + "solana-define-syscall 2.2.1", + "solana-hash 2.2.1", "solana-sanitize", ] @@ -6381,7 +6484,7 @@ dependencies = [ "serde", "serde_derive", "solana-bincode", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-pubkey", "solana-sanitize", @@ -6405,9 +6508,9 @@ dependencies = [ "reqwest", "solana-clock", "solana-cluster-type", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", "solana-time-utils", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6416,7 +6519,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36a1a14399afaabc2781a1db09cb14ee4cc4ee5c7a5a3cfcc601811379a8092" dependencies = [ - "solana-define-syscall", + "solana-define-syscall 2.2.1", ] [[package]] @@ -6434,9 +6537,9 @@ dependencies = [ "serde", "serde_derive", "solana-fee-calculator", - "solana-hash", + "solana-hash 2.2.1", "solana-pubkey", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", ] [[package]] @@ -6446,7 +6549,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cde971a20b8dbf60144d6a84439dda86b5466e00e2843091fe731083cda614da" dependencies = [ "solana-account", - "solana-hash", + "solana-hash 2.2.1", "solana-nonce", "solana-sdk-ids", ] @@ -6458,11 +6561,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b526398ade5dea37f1f147ce55dae49aa017a5d7326606359b0445ca8d946581" dependencies = [ "num_enum", - "solana-hash", + "solana-hash 2.2.1", "solana-packet", "solana-pubkey", "solana-sanitize", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", "solana-signature", "solana-signer", ] @@ -6499,8 +6602,8 @@ checksum = "8ad1ea160d08dc423c35021fa3e437a5783eb256f5ab8bc3024e27db913acf42" dependencies = [ "ark-bn254", "light-poseidon", - "solana-define-syscall", - "thiserror 2.0.17", + "solana-define-syscall 2.2.1", + "thiserror 2.0.18", ] [[package]] @@ -6576,13 +6679,13 @@ dependencies = [ "solana-clock", "solana-cpi", "solana-decode-error", - "solana-define-syscall", + "solana-define-syscall 2.2.1", "solana-epoch-rewards", "solana-epoch-schedule", "solana-example-mocks", "solana-feature-gate-interface", "solana-fee-calculator", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-instructions-sysvar", "solana-keccak-hasher", @@ -6595,7 +6698,7 @@ dependencies = [ "solana-native-token", "solana-nonce", "solana-program-entrypoint", - "solana-program-error", + "solana-program-error 2.2.2", "solana-program-memory", "solana-program-option", "solana-program-pack", @@ -6607,7 +6710,7 @@ dependencies = [ "solana-secp256k1-recover", "solana-serde-varint", "solana-serialize-utils", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", "solana-short-vec", "solana-slot-hashes", "solana-slot-history", @@ -6617,7 +6720,7 @@ dependencies = [ "solana-sysvar", "solana-sysvar-id", "solana-vote-interface", - "thiserror 2.0.17", + "thiserror 2.0.18", "wasm-bindgen", ] @@ -6629,7 +6732,7 @@ checksum = "473ffe73c68d93e9f2aa726ad2985fe52760052709aaab188100a42c618060ec" dependencies = [ "solana-account-info", "solana-msg", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", ] @@ -6649,6 +6752,12 @@ dependencies = [ "solana-pubkey", ] +[[package]] +name = "solana-program-error" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1af32c995a7b692a915bb7414d5f8e838450cf7c70414e763d8abcae7b51f28" + [[package]] name = "solana-program-memory" version = "2.2.1" @@ -6656,7 +6765,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b0268f6c89825fb634a34bd0c3b8fdaeaecfc3728be1d622a8ee6dd577b60d4" dependencies = [ "num-traits", - "solana-define-syscall", + "solana-define-syscall 2.2.1", ] [[package]] @@ -6671,7 +6780,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "319f0ef15e6e12dc37c597faccb7d62525a509fec5f6975ecb9419efddeb277b" dependencies = [ - "solana-program-error", + "solana-program-error 2.2.2", ] [[package]] @@ -6694,7 +6803,7 @@ dependencies = [ "solana-epoch-rewards", "solana-epoch-schedule", "solana-feature-set", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-last-restart-slot", "solana-log-collector", @@ -6712,7 +6821,7 @@ dependencies = [ "solana-timings", "solana-transaction-context", "solana-type-overrides", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6727,7 +6836,7 @@ dependencies = [ "bytemuck", "bytemuck_derive", "curve25519-dalek 4.1.3", - "five8_const", + "five8_const 0.1.4", "getrandom 0.2.16", "js-sys", "num-traits", @@ -6736,9 +6845,9 @@ dependencies = [ "serde_derive", "solana-atomic-u64", "solana-decode-error", - "solana-define-syscall", + "solana-define-syscall 2.2.1", "solana-sanitize", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", "wasm-bindgen", ] @@ -6761,7 +6870,7 @@ dependencies = [ "solana-pubkey", "solana-rpc-client-api", "solana-signature", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-stream", "tokio-tungstenite", @@ -6865,7 +6974,7 @@ dependencies = [ "solana-epoch-info", "solana-epoch-schedule", "solana-feature-gate-interface", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-message", "solana-pubkey", @@ -6906,7 +7015,7 @@ dependencies = [ "solana-transaction-error", "solana-transaction-status-client-types", "solana-version", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6999,7 +7108,7 @@ dependencies = [ "solana-transaction-context", "solana-transaction-error", "solana-validator-exit", - "thiserror 2.0.17", + "thiserror 2.0.18", "wasm-bindgen", ] @@ -7021,7 +7130,7 @@ dependencies = [ "bs58", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -7050,8 +7159,8 @@ checksum = "baa3120b6cdaa270f39444f5093a90a7b03d296d362878f7a6991d6de3bbe496" dependencies = [ "borsh 1.6.0", "libsecp256k1", - "solana-define-syscall", - "thiserror 2.0.17", + "solana-define-syscall 2.2.1", + "thiserror 2.0.18", ] [[package]] @@ -7133,8 +7242,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0037386961c0d633421f53560ad7c80675c0447cba4d1bb66d60974dd486c7ea" dependencies = [ "sha2 0.10.9", - "solana-define-syscall", - "solana-hash", + "solana-define-syscall 2.2.1", + "solana-hash 2.2.1", +] + +[[package]] +name = "solana-sha256-hasher" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db7dc3011ea4c0334aaaa7e7128cb390ecf546b28d412e9bf2064680f57f588f" +dependencies = [ + "sha2 0.10.9", + "solana-define-syscall 4.0.1", + "solana-hash 4.2.0", ] [[package]] @@ -7153,8 +7273,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afd3db0461089d1ad1a78d9ba3f15b563899ca2386351d38428faa5350c60a98" dependencies = [ "solana-hard-forks", - "solana-hash", - "solana-sha256-hasher", + "solana-hash 2.2.1", + "solana-sha256-hasher 2.2.1", ] [[package]] @@ -7191,7 +7311,7 @@ checksum = "0c8691982114513763e88d04094c9caa0376b867a29577939011331134c301ce" dependencies = [ "serde", "serde_derive", - "solana-hash", + "solana-hash 2.2.1", "solana-sdk-ids", "solana-sysvar-id", ] @@ -7234,7 +7354,7 @@ dependencies = [ "solana-cpi", "solana-decode-error", "solana-instruction", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "solana-system-interface", "solana-sysvar-id", @@ -7280,7 +7400,7 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-message", "solana-pubkey", @@ -7310,7 +7430,7 @@ dependencies = [ "solana-compute-budget-instruction", "solana-feature-set", "solana-fee-structure", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-instructions-sysvar", "solana-loader-v4-program", @@ -7334,7 +7454,7 @@ dependencies = [ "solana-transaction-context", "solana-transaction-error", "solana-type-overrides", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -7352,7 +7472,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fc4392f0eed412141a376e99dfb052069b96f13697a9abb335504babe29387a" dependencies = [ - "solana-hash", + "solana-hash 2.2.1", "solana-message", "solana-pubkey", "solana-sdk-ids", @@ -7408,7 +7528,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bd98a25e5bcba8b6be8bcbb7b84b24c2a6a8178d7fb0e3077a916855ceba91a" dependencies = [ - "solana-hash", + "solana-hash 2.2.1", "solana-keypair", "solana-message", "solana-pubkey", @@ -7432,16 +7552,16 @@ dependencies = [ "serde_derive", "solana-account-info", "solana-clock", - "solana-define-syscall", + "solana-define-syscall 2.2.1", "solana-epoch-rewards", "solana-epoch-schedule", "solana-fee-calculator", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-instructions-sysvar", "solana-last-restart-slot", "solana-program-entrypoint", - "solana-program-error", + "solana-program-error 2.2.2", "solana-program-memory", "solana-pubkey", "solana-rent", @@ -7492,7 +7612,7 @@ dependencies = [ "serde_derive", "solana-bincode", "solana-feature-set", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-message", @@ -7555,7 +7675,7 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-clock", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-loader-v2-interface", "solana-message", @@ -7575,7 +7695,7 @@ dependencies = [ "spl-token-2022 7.0.0", "spl-token-group-interface", "spl-token-metadata-interface", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -7598,7 +7718,7 @@ dependencies = [ "solana-transaction", "solana-transaction-context", "solana-transaction-error", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -7644,7 +7764,7 @@ dependencies = [ "serde_derive", "solana-clock", "solana-decode-error", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-pubkey", "solana-rent", @@ -7672,7 +7792,7 @@ dependencies = [ "solana-clock", "solana-epoch-schedule", "solana-feature-set", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-packet", @@ -7685,7 +7805,7 @@ dependencies = [ "solana-transaction", "solana-transaction-context", "solana-vote-interface", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -7720,7 +7840,7 @@ dependencies = [ "solana-signature", "solana-signer", "subtle", - "thiserror 2.0.17", + "thiserror 2.0.18", "wasm-bindgen", "zeroize", ] @@ -7752,7 +7872,7 @@ dependencies = [ "simdutf8", "sonic-number", "sonic-simd", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -7806,8 +7926,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7398da23554a31660f17718164e31d31900956054f54f52d5ec1be51cb4f4b3" dependencies = [ "bytemuck", - "solana-program-error", - "solana-sha256-hasher", + "solana-program-error 2.2.2", + "solana-sha256-hasher 2.2.1", "spl-discriminator-derive", ] @@ -7819,7 +7939,7 @@ checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750" dependencies = [ "quote", "spl-discriminator-syn", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -7831,7 +7951,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.9", - "syn 2.0.111", + "syn 2.0.117", "thiserror 1.0.69", ] @@ -7858,7 +7978,7 @@ dependencies = [ "solana-instruction", "solana-msg", "solana-program-entrypoint", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", ] @@ -7875,11 +7995,11 @@ dependencies = [ "num-traits", "solana-decode-error", "solana-msg", - "solana-program-error", + "solana-program-error 2.2.2", "solana-program-option", "solana-pubkey", "solana-zk-sdk", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -7904,7 +8024,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.9", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -7920,7 +8040,7 @@ dependencies = [ "solana-decode-error", "solana-instruction", "solana-msg", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "spl-discriminator", "spl-pod", @@ -7997,7 +8117,7 @@ dependencies = [ "spl-token-metadata-interface", "spl-transfer-hook-interface", "spl-type-length-value", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -8023,7 +8143,7 @@ dependencies = [ "solana-program", "solana-zk-sdk", "spl-pod", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -8045,7 +8165,7 @@ checksum = "0e3597628b0d2fe94e7900fd17cdb4cfbb31ee35c66f82809d27d86e44b2848b" dependencies = [ "curve25519-dalek 4.1.3", "solana-zk-sdk", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -8060,7 +8180,7 @@ dependencies = [ "solana-decode-error", "solana-instruction", "solana-msg", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "spl-discriminator", "spl-pod", @@ -8080,7 +8200,7 @@ dependencies = [ "solana-decode-error", "solana-instruction", "solana-msg", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "spl-discriminator", "spl-pod", @@ -8103,7 +8223,7 @@ dependencies = [ "solana-decode-error", "solana-instruction", "solana-msg", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "spl-discriminator", "spl-pod", @@ -8125,7 +8245,7 @@ dependencies = [ "solana-account-info", "solana-decode-error", "solana-msg", - "solana-program-error", + "solana-program-error 2.2.2", "spl-discriminator", "spl-pod", "thiserror 1.0.69", @@ -8207,7 +8327,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8219,7 +8339,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8241,9 +8361,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.111" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -8270,7 +8390,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8384,11 +8504,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.17", + "thiserror-impl 2.0.18", ] [[package]] @@ -8399,18 +8519,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8504,7 +8624,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8747,7 +8867,7 @@ dependencies = [ "proc-macro2", "prost-build 0.12.6", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8761,7 +8881,7 @@ dependencies = [ "prost-build 0.13.5", "prost-types 0.13.5", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8858,7 +8978,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9171,7 +9291,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", "wasm-bindgen-shared", ] @@ -9262,6 +9382,31 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "wincode" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "466e67917609b2d40a838a5b972d1a6237c9749600cb8de8f65559b90d48485b" +dependencies = [ + "pastey", + "proc-macro2", + "quote", + "thiserror 2.0.18", + "wincode-derive", +] + +[[package]] +name = "wincode-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26a7a568eda854acc9945ed136a9d50b8c6d31911584624958808ae96eee3912" +dependencies = [ + "darling 0.21.3", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "windows" version = "0.62.2" @@ -9315,7 +9460,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9326,7 +9471,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9643,6 +9788,18 @@ dependencies = [ "tap", ] +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek 4.1.3", + "rand_core 0.6.4", + "serde", + "zeroize", +] + [[package]] name = "yansi" version = "1.0.1" @@ -9677,7 +9834,7 @@ dependencies = [ "solana-account", "solana-account-decoder", "solana-clock", - "solana-hash", + "solana-hash 2.2.1", "solana-message", "solana-pubkey", "solana-signature", @@ -9708,7 +9865,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", "synstructure", ] @@ -9729,7 +9886,7 @@ checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9749,7 +9906,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", "synstructure", ] @@ -9770,7 +9927,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9803,7 +9960,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 8d47b19ba..cb15ba3c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -102,8 +102,8 @@ magicblock-committor-program = { path = "./magicblock-committor-program", featur magicblock-committor-service = { path = "./magicblock-committor-service" } magicblock-config = { path = "./magicblock-config" } magicblock-core = { path = "./magicblock-core" } -magicblock-delegation-program = { git = "https://github.com/magicblock-labs/delegation-program.git", rev = "2cb491032f372", features = [ - "no-entrypoint", +magicblock-delegation-program = { path = "../delegation-program", default-features = false, features = [ + "sdk", ] } magicblock-ledger = { path = "./magicblock-ledger" } magicblock-magic-program-api = { path = "./magicblock-magic-program-api" } diff --git a/magicblock-account-cloner/src/lib.rs b/magicblock-account-cloner/src/lib.rs index 456ad08db..590130e4d 100644 --- a/magicblock-account-cloner/src/lib.rs +++ b/magicblock-account-cloner/src/lib.rs @@ -122,7 +122,7 @@ impl ChainlinkCloner { message, ); // Defined positive commit frequency means commits should be scheduled - let ixs = match request.commit_frequency_ms { + let mut ixs = match request.commit_frequency_ms { // TODO(GabrielePicco): Hotfix. Do not schedule frequency commits until we impose limits. // 1. Allow configuring a higher minimum. // 2. Stop committing accounts if they have been committed more than X times, @@ -162,6 +162,9 @@ impl ChainlinkCloner { } _ => vec![modify_ix], }; + if !request.delegation_actions.is_empty() { + ixs.extend(request.delegation_actions.clone()); + } let mut tx = Transaction::new_with_payer(&ixs, Some(&validator_authority_id())); diff --git a/magicblock-chainlink/src/chainlink/errors.rs b/magicblock-chainlink/src/chainlink/errors.rs index 18f3884b6..ef2832dda 100644 --- a/magicblock-chainlink/src/chainlink/errors.rs +++ b/magicblock-chainlink/src/chainlink/errors.rs @@ -20,6 +20,8 @@ pub enum ChainlinkError { #[error("Delegation record could not be decoded: {0} ({1:?})")] InvalidDelegationRecord(Pubkey, ProgramError), + #[error("Delegation actions could not be decoded: {0} ({1})")] + InvalidDelegationActions(Pubkey, String), #[error("Failed to resolve one or more accounts {0} when getting delegation records")] DelegatedAccountResolutionsFailed(String), diff --git a/magicblock-chainlink/src/chainlink/fetch_cloner/ata_projection.rs b/magicblock-chainlink/src/chainlink/fetch_cloner/ata_projection.rs index 11bd4c322..b1483e2ab 100644 --- a/magicblock-chainlink/src/chainlink/fetch_cloner/ata_projection.rs +++ b/magicblock-chainlink/src/chainlink/fetch_cloner/ata_projection.rs @@ -147,6 +147,7 @@ where pubkey: ata_pubkey, account: account_to_clone, commit_frequency_ms, + delegation_actions: vec![], delegated_to_other, }); } diff --git a/magicblock-chainlink/src/chainlink/fetch_cloner/delegation.rs b/magicblock-chainlink/src/chainlink/fetch_cloner/delegation.rs index 6ab3a5205..e6efd5df4 100644 --- a/magicblock-chainlink/src/chainlink/fetch_cloner/delegation.rs +++ b/magicblock-chainlink/src/chainlink/fetch_cloner/delegation.rs @@ -5,6 +5,7 @@ use magicblock_accounts_db::traits::AccountsBank; use magicblock_core::token_programs::EATA_PROGRAM_ID; use magicblock_metrics::metrics; use solana_account::ReadableAccount; +use solana_instruction::Instruction; use solana_pubkey::Pubkey; use tracing::*; @@ -32,6 +33,24 @@ pub(crate) fn parse_delegation_record( }) } +pub(crate) fn parse_delegation_actions( + data: &[u8], + delegation_record_pubkey: Pubkey, +) -> ChainlinkResult> { + let delegation_record_size = DelegationRecord::size_with_discriminator(); + if data.len() <= delegation_record_size { + return Ok(vec![]); + } + + let actions_data = &data[delegation_record_size..]; + bincode::deserialize::>(actions_data).map_err(|err| { + ChainlinkError::InvalidDelegationActions( + delegation_record_pubkey, + err.to_string(), + ) + }) +} + pub(crate) fn apply_delegation_record_to_account( this: &FetchCloner, account: &mut ResolvedAccountSharedData, diff --git a/magicblock-chainlink/src/chainlink/fetch_cloner/mod.rs b/magicblock-chainlink/src/chainlink/fetch_cloner/mod.rs index da91ffed7..84906dcd0 100644 --- a/magicblock-chainlink/src/chainlink/fetch_cloner/mod.rs +++ b/magicblock-chainlink/src/chainlink/fetch_cloner/mod.rs @@ -167,7 +167,7 @@ where // record fetches. This allows multiple updates to be processed in parallel. let this = Arc::clone(&self); tokio::spawn(async move { - let (resolved_account, deleg_record) = + let (resolved_account, deleg_record, delegation_actions) = this.resolve_account_to_clone_from_forwarded_sub_with_unsubscribe(update) .await; if let Some(account) = resolved_account { @@ -277,6 +277,7 @@ where pubkey, account, commit_frequency_ms: None, + delegation_actions, delegated_to_other, }) .await @@ -332,7 +333,11 @@ where async fn resolve_account_to_clone_from_forwarded_sub_with_unsubscribe( &self, update: ForwardedSubscriptionUpdate, - ) -> (Option, Option) { + ) -> ( + Option, + Option, + Vec, + ) { let ForwardedSubscriptionUpdate { pubkey, account } = update; let owned_by_delegation_program = account.is_owned_by_delegation_program(); @@ -376,6 +381,32 @@ where let account = if let Some(delegation_record) = delegation_record { + let delegation_record_size = + DelegationRecord::size_with_discriminator(); + if delegation_record.data().len() + == delegation_record_size + { + // Regular delegation record layout. + } else { + // DelegateWithActions layout (DelegationRecord + trailing bytes). + } + + let delegation_actions = + match Self::parse_delegation_actions( + delegation_record.data(), + delegation_record_pubkey, + ) { + Ok(actions) => actions, + Err(err) => { + error!( + pubkey = %pubkey, + error = %err, + "Failed to parse delegation actions" + ); + vec![] + } + }; + let delegation_record = match Self::parse_delegation_record( delegation_record.data(), @@ -438,17 +469,25 @@ where ( Some(account.into_account_shared_data()), Some(delegation_record), + delegation_actions, ) } else { // If the delegation record is invalid we cannot clone the account // since something is corrupt and we wouldn't know what owner to // use, etc. - (None, None) + (None, None, vec![]) } } else { // If no delegation record exists we must assume the account itself is // a delegation record or metadata - (Some(account.into_account_shared_data()), None) + let delegation_record_size = + DelegationRecord::size_with_discriminator(); + if account.data().len() == delegation_record_size { + // Regular delegation record layout. + } else { + // DelegateWithActions layout (DelegationRecord + trailing bytes). + } + (Some(account.into_account_shared_data()), None, vec![]) }; if !subs_to_remove.is_empty() { @@ -467,7 +506,7 @@ where error = %err, "Failed to fetch delegation record" ); - (None, None) + (None, None, vec![]) } Err(err) => { error!( @@ -475,20 +514,20 @@ where error = %err, "Failed to fetch delegation record" ); - (None, None) + (None, None, vec![]) } } } else { let (account, deleg_record) = self .maybe_project_ata_from_subscription_update(pubkey, account) .await; - (Some(account), deleg_record) + (Some(account), deleg_record, vec![]) } } else { // This should not happen since we call this method with sub updates which always hold // a fresh remote account error!(pubkey = %pubkey, account = ?account, "BUG: Received subscription update without fresh account"); - (None, None) + (None, None, vec![]) } } @@ -547,6 +586,7 @@ where pubkey: ata_pubkey, account: projected_ata, commit_frequency_ms: None, + delegation_actions: vec![], delegated_to_other: None, }) } @@ -659,6 +699,13 @@ where delegation::parse_delegation_record(data, delegation_record_pubkey) } + fn parse_delegation_actions( + data: &[u8], + delegation_record_pubkey: Pubkey, + ) -> ChainlinkResult> { + delegation::parse_delegation_actions(data, delegation_record_pubkey) + } + /// Applies delegation record settings to an account: sets the owner, /// delegation status, and confined status based on the delegation /// record's authority field. @@ -1367,6 +1414,7 @@ where pubkey, account, commit_frequency_ms: None, + delegation_actions: vec![], delegated_to_other: None, }) .await?; diff --git a/magicblock-chainlink/src/chainlink/fetch_cloner/pipeline.rs b/magicblock-chainlink/src/chainlink/fetch_cloner/pipeline.rs index 2fd9c59ba..2ba7e10b5 100644 --- a/magicblock-chainlink/src/chainlink/fetch_cloner/pipeline.rs +++ b/magicblock-chainlink/src/chainlink/fetch_cloner/pipeline.rs @@ -143,6 +143,7 @@ fn classify_single_account( pubkey, account: account_shared_data, commit_frequency_ms: None, + delegation_actions: vec![], delegated_to_other: None, }); } @@ -292,15 +293,48 @@ where record_subs.push(delegation_record_pubkey); // If the account is delegated we set the owner and delegation state - let (commit_frequency_ms, delegated_to_other) = if let Some( + let (commit_frequency_ms, delegated_to_other, delegation_actions) = if let Some( delegation_record_data, ) = delegation_record { + let delegation_record_size = + dlp::state::DelegationRecord::size_with_discriminator(); + if delegation_record_data.data().len() == delegation_record_size + { + // Regular delegation record layout. + } else { + // DelegateWithActions layout (DelegationRecord + trailing bytes). + } + // NOTE: failing here is fine when resolving all accounts for a transaction // since if something is off we better not run it anyways // However we may consider a different behavior when user is getting // multiple accounts. + let delegation_actions = + match FetchCloner::::parse_delegation_actions( + delegation_record_data.data(), + delegation_record_pubkey, + ) { + Ok(x) => x, + Err(err) => { + // Cancel all new subs since we won't clone any accounts + cancel_subs( + &this.remote_account_provider, + CancelStrategy::New { + new_subs: pubkeys + .iter() + .cloned() + .chain(record_subs.iter().cloned()) + .collect(), + existing_subs: existing_subs.clone(), + }, + ) + .await; + return Err(err); + } + }; + let delegation_record = match FetchCloner::::parse_delegation_record( delegation_record_data.data(), @@ -340,15 +374,16 @@ where owner_programs_to_subscribe.insert(delegation_record.owner); } - (commit_freq, delegated_to_other) + (commit_freq, delegated_to_other, delegation_actions) } else { missing_delegation_record.push((pubkey, account.remote_slot())); - (None, None) + (None, None, vec![]) }; accounts_to_clone.push(AccountCloneRequest { pubkey, account: account.into_account_shared_data(), commit_frequency_ms, + delegation_actions, delegated_to_other, }); } diff --git a/magicblock-chainlink/src/cloner/mod.rs b/magicblock-chainlink/src/cloner/mod.rs index f63d27578..9d1de024e 100644 --- a/magicblock-chainlink/src/cloner/mod.rs +++ b/magicblock-chainlink/src/cloner/mod.rs @@ -1,6 +1,7 @@ use async_trait::async_trait; use errors::ClonerResult; use solana_account::AccountSharedData; +use solana_instruction::Instruction; use solana_pubkey::Pubkey; use solana_signature::Signature; @@ -12,6 +13,7 @@ pub struct AccountCloneRequest { pub pubkey: Pubkey, pub account: AccountSharedData, pub commit_frequency_ms: Option, + pub delegation_actions: Vec, /// If the account is delegated to another validator, /// this contains that validator's pubkey. None if account is not /// delegated to another validator. diff --git a/test-integration/Cargo.lock b/test-integration/Cargo.lock index 2502ceb77..1542b62d3 100644 --- a/test-integration/Cargo.lock +++ b/test-integration/Cargo.lock @@ -74,7 +74,7 @@ dependencies = [ "solana-signature", "solana-transaction", "solana-transaction-status", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -83,7 +83,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aba2aec0682aa448f93db9b93df8fb331c119cb4d66fe9ba61d6b42dd3a91105" dependencies = [ - "solana-hash", + "solana-hash 2.2.1", "solana-message", "solana-packet", "solana-pubkey", @@ -223,7 +223,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -466,7 +466,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -477,7 +477,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -639,7 +639,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -657,7 +657,7 @@ dependencies = [ "regex", "rustc-hash 2.1.1", "shlex", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -780,7 +780,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -890,7 +890,7 @@ checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -981,7 +981,7 @@ checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1059,7 +1059,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1362,7 +1362,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1386,7 +1386,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1397,7 +1397,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1480,7 +1480,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.111", + "syn 2.0.117", "unicode-xid", ] @@ -1539,7 +1539,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1562,7 +1562,7 @@ checksum = "a6cbae11b3de8fce2a456e8ea3dada226b35fe791f0dc1d360c0941f0bb681f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1668,7 +1668,7 @@ checksum = "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1681,7 +1681,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1715,7 +1715,7 @@ dependencies = [ "solana-account-info", "solana-cpi", "solana-instruction", - "solana-program-error", + "solana-program-error 2.2.2", "solana-program-memory", "solana-pubkey", "solana-system-interface", @@ -1920,6 +1920,15 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +[[package]] +name = "five8" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23f76610e969fa1784327ded240f1e28a3fd9520c9cec93b636fcf62dd37f772" +dependencies = [ + "five8_core", +] + [[package]] name = "five8_const" version = "0.1.4" @@ -1929,6 +1938,15 @@ dependencies = [ "five8_core", ] +[[package]] +name = "five8_const" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a0f1728185f277989ca573a402716ae0beaaea3f76a8ff87ef9dd8fb19436c5" +dependencies = [ + "five8_core", +] + [[package]] name = "five8_core" version = "0.1.2" @@ -2098,7 +2116,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2220,7 +2238,7 @@ checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3288,7 +3306,7 @@ dependencies = [ "magicblock-rpc-client", "rand 0.9.2", "solana-account", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-loader-v3-interface 3.0.0", "solana-loader-v4-interface", @@ -3314,7 +3332,7 @@ dependencies = [ "magicblock-committor-service", "magicblock-core", "magicblock-program", - "solana-hash", + "solana-hash 2.2.1", "solana-pubkey", "solana-transaction", "solana-transaction-error", @@ -3420,7 +3438,7 @@ dependencies = [ "solana-feature-set", "solana-fee-calculator", "solana-genesis-config", - "solana-hash", + "solana-hash 2.2.1", "solana-inline-spl", "solana-instruction", "solana-keypair", @@ -3430,7 +3448,7 @@ dependencies = [ "solana-pubkey", "solana-rent", "solana-rpc-client", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", "solana-signature", "solana-signer", "solana-system-program", @@ -3456,7 +3474,7 @@ dependencies = [ "magicblock-accounts-db", "magicblock-config", "magicblock-core", - "magicblock-delegation-program 1.1.3 (git+https://github.com/magicblock-labs/delegation-program.git?rev=2cb491032f372)", + "magicblock-delegation-program 1.1.3", "magicblock-magic-program-api 0.8.0", "magicblock-metrics", "parking_lot", @@ -3468,7 +3486,7 @@ dependencies = [ "solana-clock", "solana-commitment-config", "solana-feature-set", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-loader-v3-interface 3.0.0", @@ -3521,7 +3539,7 @@ dependencies = [ "futures-util", "lru", "magicblock-committor-program", - "magicblock-delegation-program 1.1.3 (git+https://github.com/magicblock-labs/delegation-program.git?rev=2cb491032f372)", + "magicblock-delegation-program 1.1.3", "magicblock-metrics", "magicblock-program", "magicblock-rpc-client", @@ -3532,7 +3550,7 @@ dependencies = [ "solana-address-lookup-table-interface", "solana-commitment-config", "solana-compute-budget-interface", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-message", @@ -3579,7 +3597,7 @@ dependencies = [ "magicblock-magic-program-api 0.8.0", "solana-account", "solana-account-decoder", - "solana-hash", + "solana-hash 2.2.1", "solana-program", "solana-pubkey", "solana-signature", @@ -3595,6 +3613,35 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "magicblock-delegation-program" +version = "1.1.3" +dependencies = [ + "bincode", + "borsh 1.6.0", + "bytemuck", + "const-crypto", + "curve25519-dalek 4.1.3", + "num_enum", + "pinocchio 0.10.2", + "pinocchio-log", + "pinocchio-pubkey", + "pinocchio-system 0.5.0", + "rand 0.8.5", + "rkyv 0.7.45", + "serde", + "sha2 0.10.9", + "solana-address", + "solana-curve25519", + "solana-program", + "solana-sdk", + "solana-sha256-hasher 3.1.0", + "static_assertions", + "strum 0.27.2", + "thiserror 1.0.69", + "x25519-dalek", +] + [[package]] name = "magicblock-delegation-program" version = "1.1.3" @@ -3618,17 +3665,17 @@ dependencies = [ "bytemuck", "const-crypto", "num_enum", - "pinocchio", + "pinocchio 0.9.2", "pinocchio-log", "pinocchio-pubkey", - "pinocchio-system", + "pinocchio-system 0.3.0", "rkyv 0.7.45", "solana-curve25519", "solana-program", "solana-security-txt", "static_assertions", "strum 0.27.2", - "thiserror 2.0.17", + "thiserror 1.0.69", ] [[package]] @@ -3651,7 +3698,7 @@ dependencies = [ "serde", "solana-account-decoder", "solana-clock", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-measure", @@ -3756,7 +3803,7 @@ dependencies = [ "solana-account-info", "solana-clock", "solana-fee-calculator", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-log-collector", @@ -3781,7 +3828,7 @@ dependencies = [ "solana-address-lookup-table-interface", "solana-clock", "solana-commitment-config", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-pubkey", "solana-rpc-client", @@ -3850,7 +3897,7 @@ dependencies = [ name = "magicblock-validator-admin" version = "0.8.0" dependencies = [ - "magicblock-delegation-program 1.1.3 (git+https://github.com/magicblock-labs/delegation-program.git?rev=2cb491032f372)", + "magicblock-delegation-program 1.1.3", "magicblock-program", "magicblock-rpc-client", "solana-commitment-config", @@ -4051,7 +4098,7 @@ checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4213,7 +4260,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4296,7 +4343,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4379,7 +4426,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4454,6 +4501,12 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pastey" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b867cad97c0791bbd3aaa6472142568c6c9e8f71937e98379f584cfb0cf35bec" + [[package]] name = "pbkdf2" version = "0.11.0" @@ -4483,7 +4536,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4537,7 +4590,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4558,6 +4611,19 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b971851087bc3699b001954ad02389d50c41405ece3548cbcafc88b3e20017a" +[[package]] +name = "pinocchio" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06810dac15a4ef83d3dabdb4f2f22fb39c9adff669cd2781da4f716510a647c" +dependencies = [ + "solana-account-view", + "solana-address", + "solana-define-syscall 4.0.1", + "solana-instruction-view", + "solana-program-error 3.0.0", +] + [[package]] name = "pinocchio-log" version = "0.5.1" @@ -4584,8 +4650,8 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0225638cadcbebae8932cb7f49cb5da7c15c21beb19f048f05a5ca7d93f065" dependencies = [ - "five8_const", - "pinocchio", + "five8_const 0.1.4", + "pinocchio 0.9.2", "sha2-const-stable", ] @@ -4595,10 +4661,20 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "141ed5eafb4ab04568bb0e224e3dc9a9de13c933de4c004e0d1a553498be3a7c" dependencies = [ - "pinocchio", + "pinocchio 0.9.2", "pinocchio-pubkey", ] +[[package]] +name = "pinocchio-system" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24044a0815753862b558e179e78f03f7344cb755de48617a09d7d23b50883b6c" +dependencies = [ + "pinocchio 0.10.2", + "solana-address", +] + [[package]] name = "pkg-config" version = "0.3.32" @@ -4694,7 +4770,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff24dfcda44452b9816fff4cd4227e1bb73ff5a2f1bc1105aa92fb8565ce44d2" dependencies = [ "proc-macro2", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4738,9 +4814,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -4753,7 +4829,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", "version_check", "yansi", ] @@ -4889,7 +4965,7 @@ dependencies = [ "prost 0.12.6", "prost-types 0.12.6", "regex", - "syn 2.0.111", + "syn 2.0.117", "tempfile", ] @@ -4909,7 +4985,7 @@ dependencies = [ "prost 0.13.5", "prost-types 0.13.5", "regex", - "syn 2.0.111", + "syn 2.0.117", "tempfile", ] @@ -4936,7 +5012,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4949,7 +5025,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5031,7 +5107,7 @@ checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5051,7 +5127,7 @@ checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5083,7 +5159,7 @@ dependencies = [ "rustc-hash 2.1.1", "rustls 0.23.35", "socket2 0.6.1", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -5106,7 +5182,7 @@ dependencies = [ "rustls-pki-types", "rustls-platform-verifier", "slab", - "thiserror 2.0.17", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -5128,9 +5204,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.42" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] @@ -5340,7 +5416,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5530,7 +5606,7 @@ checksum = "bd83f5f173ff41e00337d97f6572e416d022ef8a19f371817259ae960324c482" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5998,7 +6074,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -6063,7 +6139,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -6089,7 +6165,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -6292,7 +6368,7 @@ dependencies = [ "spl-token-2022 7.0.0", "spl-token-group-interface", "spl-token-metadata-interface", - "thiserror 2.0.17", + "thiserror 2.0.18", "zstd", ] @@ -6320,11 +6396,21 @@ checksum = "e0c17d606a298a205fae325489fbed88ee6dc4463c111672172327e741c8905d" dependencies = [ "bincode", "serde", - "solana-program-error", + "solana-program-error 2.2.2", "solana-program-memory", "solana-pubkey", ] +[[package]] +name = "solana-account-view" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f37ca34c37f92ee341b73d5ce7c8ef5bb38e9a87955b4bd343c63fa18b149215" +dependencies = [ + "solana-address", + "solana-program-error 3.0.0", +] + [[package]] name = "solana-accounts-db" version = "2.2.1" @@ -6358,7 +6444,7 @@ dependencies = [ "smallvec", "solana-bucket-map", "solana-clock", - "solana-hash", + "solana-hash 2.2.1", "solana-inline-spl", "solana-lattice-hash", "solana-measure", @@ -6371,7 +6457,27 @@ dependencies = [ "static_assertions", "tar", "tempfile", - "thiserror 2.0.17", + "thiserror 2.0.18", +] + +[[package]] +name = "solana-address" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68c5d02824391b072dc5cd0aaa85fb0af9784a21d23286a767994d1e8a322131" +dependencies = [ + "borsh 1.6.0", + "bytemuck", + "bytemuck_derive", + "curve25519-dalek 4.1.3", + "five8", + "five8_const 1.0.0", + "serde", + "sha2-const-stable", + "solana-define-syscall 5.0.0", + "solana-program-error 3.0.0", + "solana-sha256-hasher 3.1.0", + "wincode", ] [[package]] @@ -6413,7 +6519,7 @@ dependencies = [ "solana-pubkey", "solana-system-interface", "solana-transaction-context", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6437,7 +6543,7 @@ dependencies = [ "solana-program", "solana-sdk", "tarpc", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-serde", ] @@ -6484,7 +6590,7 @@ checksum = "75db7f2bbac3e62cfd139065d15bcda9e2428883ba61fc8d27ccb251081e7567" dependencies = [ "num-bigint 0.4.6", "num-traits", - "solana-define-syscall", + "solana-define-syscall 2.2.1", ] [[package]] @@ -6505,8 +6611,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1a0801e25a1b31a14494fc80882a036be0ffd290efc4c2d640bfcca120a4672" dependencies = [ "blake3", - "solana-define-syscall", - "solana-hash", + "solana-define-syscall 2.2.1", + "solana-hash 2.2.1", "solana-sanitize", ] @@ -6521,8 +6627,8 @@ dependencies = [ "ark-ff", "ark-serialize", "bytemuck", - "solana-define-syscall", - "thiserror 2.0.17", + "solana-define-syscall 2.2.1", + "thiserror 2.0.18", ] [[package]] @@ -6556,7 +6662,7 @@ dependencies = [ "solana-cpi", "solana-curve25519", "solana-feature-set", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keccak-hasher", "solana-loader-v3-interface 3.0.0", @@ -6573,7 +6679,7 @@ dependencies = [ "solana-sbpf", "solana-sdk-ids", "solana-secp256k1-recover", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", "solana-stable-layout", "solana-system-interface", "solana-sysvar", @@ -6581,7 +6687,7 @@ dependencies = [ "solana-timings", "solana-transaction-context", "solana-type-overrides", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6670,7 +6776,7 @@ dependencies = [ "solana-commitment-config", "solana-connection-cache", "solana-epoch-info", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-measure", @@ -6691,7 +6797,7 @@ dependencies = [ "solana-transaction", "solana-transaction-error", "solana-udp-client", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", ] @@ -6704,7 +6810,7 @@ dependencies = [ "solana-account", "solana-commitment-config", "solana-epoch-info", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-message", @@ -6737,7 +6843,7 @@ checksum = "7ace9fea2daa28354d107ea879cff107181d85cd4e0f78a2bedb10e1a428c97e" dependencies = [ "serde", "serde_derive", - "solana-hash", + "solana-hash 2.2.1", ] [[package]] @@ -6778,7 +6884,7 @@ dependencies = [ "solana-sdk-ids", "solana-svm-transaction", "solana-transaction-error", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6848,7 +6954,7 @@ dependencies = [ "solana-net-utils", "solana-time-utils", "solana-transaction-error", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", ] @@ -6888,9 +6994,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8dc71126edddc2ba014622fc32d0f5e2e78ec6c5a1e0eb511b85618c09e9ea11" dependencies = [ "solana-account-info", - "solana-define-syscall", + "solana-define-syscall 2.2.1", "solana-instruction", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "solana-stable-layout", ] @@ -6904,9 +7010,9 @@ dependencies = [ "bytemuck", "bytemuck_derive", "curve25519-dalek 4.1.3", - "solana-define-syscall", + "solana-define-syscall 2.2.1", "subtle", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6924,6 +7030,18 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf784bb2cb3e02cac9801813c30187344228d2ae952534902108f6150573a33d" +[[package]] +name = "solana-define-syscall" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57e5b1c0bc1d4a4d10c88a4100499d954c09d3fecfae4912c1a074dff68b1738" + +[[package]] +name = "solana-define-syscall" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03aacdd7a61e2109887a7a7f046caebafce97ddf1150f33722eeac04f9039c73" + [[package]] name = "solana-derivation-path" version = "2.2.1" @@ -6968,7 +7086,7 @@ checksum = "86b575d3dd323b9ea10bb6fe89bf6bf93e249b215ba8ed7f68f1a3633f384db7" dependencies = [ "serde", "serde_derive", - "solana-hash", + "solana-hash 2.2.1", "solana-sdk-ids", "solana-sdk-macro", "solana-sysvar-id", @@ -6981,7 +7099,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c5fd2662ae7574810904585fd443545ed2b568dbd304b25a31e79ccc76e81b" dependencies = [ "siphasher 0.3.11", - "solana-hash", + "solana-hash 2.2.1", "solana-pubkey", ] @@ -7008,7 +7126,7 @@ dependencies = [ "serde_derive", "solana-address-lookup-table-interface", "solana-clock", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keccak-hasher", "solana-message", @@ -7016,7 +7134,7 @@ dependencies = [ "solana-pubkey", "solana-sdk-ids", "solana-system-interface", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -7031,7 +7149,7 @@ dependencies = [ "solana-account", "solana-account-info", "solana-instruction", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "solana-rent", "solana-sdk-ids", @@ -7047,9 +7165,9 @@ dependencies = [ "ahash 0.8.12", "lazy_static", "solana-epoch-schedule", - "solana-hash", + "solana-hash 2.2.1", "solana-pubkey", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", ] [[package]] @@ -7094,7 +7212,7 @@ checksum = "b83f88a126213cbcb57672c5e70ddb9791eff9b480e9f39fe9285fd2abca66fa" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -7113,7 +7231,7 @@ dependencies = [ "solana-cluster-type", "solana-epoch-schedule", "solana-fee-calculator", - "solana-hash", + "solana-hash 2.2.1", "solana-inflation", "solana-keypair", "solana-logger", @@ -7122,7 +7240,7 @@ dependencies = [ "solana-pubkey", "solana-rent", "solana-sdk-ids", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", "solana-shred-version", "solana-signer", "solana-time-utils", @@ -7156,6 +7274,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "solana-hash" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8064ea1d591ec791be95245058ca40f4f5345d390c200069d0f79bbf55bfae55" + [[package]] name = "solana-inflation" version = "2.2.1" @@ -7189,11 +7313,23 @@ dependencies = [ "num-traits", "serde", "serde_derive", - "solana-define-syscall", + "solana-define-syscall 2.2.1", "solana-pubkey", "wasm-bindgen", ] +[[package]] +name = "solana-instruction-view" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60147e4d0a4620013df40bf30a86dd299203ff12fcb8b593cd51014fce0875d8" +dependencies = [ + "solana-account-view", + "solana-address", + "solana-define-syscall 4.0.1", + "solana-program-error 3.0.0", +] + [[package]] name = "solana-instructions-sysvar" version = "2.2.1" @@ -7203,7 +7339,7 @@ dependencies = [ "bitflags 2.10.0", "solana-account-info", "solana-instruction", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "solana-sanitize", "solana-sdk-ids", @@ -7218,8 +7354,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7aeb957fbd42a451b99235df4942d96db7ef678e8d5061ef34c9b34cae12f79" dependencies = [ "sha3", - "solana-define-syscall", - "solana-hash", + "solana-define-syscall 2.2.1", + "solana-hash 2.2.1", "solana-sanitize", ] @@ -7389,7 +7525,7 @@ dependencies = [ "serde", "serde_derive", "solana-bincode", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-pubkey", "solana-sanitize", @@ -7413,9 +7549,9 @@ dependencies = [ "reqwest", "solana-clock", "solana-cluster-type", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", "solana-time-utils", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -7424,7 +7560,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36a1a14399afaabc2781a1db09cb14ee4cc4ee5c7a5a3cfcc601811379a8092" dependencies = [ - "solana-define-syscall", + "solana-define-syscall 2.2.1", ] [[package]] @@ -7470,9 +7606,9 @@ dependencies = [ "serde", "serde_derive", "solana-fee-calculator", - "solana-hash", + "solana-hash 2.2.1", "solana-pubkey", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", ] [[package]] @@ -7482,7 +7618,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cde971a20b8dbf60144d6a84439dda86b5466e00e2843091fe731083cda614da" dependencies = [ "solana-account", - "solana-hash", + "solana-hash 2.2.1", "solana-nonce", "solana-sdk-ids", ] @@ -7494,11 +7630,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b526398ade5dea37f1f147ce55dae49aa017a5d7326606359b0445ca8d946581" dependencies = [ "num_enum", - "solana-hash", + "solana-hash 2.2.1", "solana-packet", "solana-pubkey", "solana-sanitize", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", "solana-signature", "solana-signer", ] @@ -7537,7 +7673,7 @@ dependencies = [ "rand 0.8.5", "rayon", "serde", - "solana-hash", + "solana-hash 2.2.1", "solana-message", "solana-metrics", "solana-packet", @@ -7567,8 +7703,8 @@ checksum = "8ad1ea160d08dc423c35021fa3e437a5783eb256f5ab8bc3024e27db913acf42" dependencies = [ "ark-bn254", "light-poseidon", - "solana-define-syscall", - "thiserror 2.0.17", + "solana-define-syscall 2.2.1", + "thiserror 2.0.18", ] [[package]] @@ -7644,13 +7780,13 @@ dependencies = [ "solana-clock", "solana-cpi", "solana-decode-error", - "solana-define-syscall", + "solana-define-syscall 2.2.1", "solana-epoch-rewards", "solana-epoch-schedule", "solana-example-mocks", "solana-feature-gate-interface", "solana-fee-calculator", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-instructions-sysvar", "solana-keccak-hasher", @@ -7663,7 +7799,7 @@ dependencies = [ "solana-native-token", "solana-nonce", "solana-program-entrypoint", - "solana-program-error", + "solana-program-error 2.2.2", "solana-program-memory", "solana-program-option", "solana-program-pack", @@ -7675,7 +7811,7 @@ dependencies = [ "solana-secp256k1-recover", "solana-serde-varint", "solana-serialize-utils", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", "solana-short-vec", "solana-slot-hashes", "solana-slot-history", @@ -7685,7 +7821,7 @@ dependencies = [ "solana-sysvar", "solana-sysvar-id", "solana-vote-interface", - "thiserror 2.0.17", + "thiserror 2.0.18", "wasm-bindgen", ] @@ -7697,7 +7833,7 @@ checksum = "473ffe73c68d93e9f2aa726ad2985fe52760052709aaab188100a42c618060ec" dependencies = [ "solana-account-info", "solana-msg", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", ] @@ -7717,6 +7853,12 @@ dependencies = [ "solana-pubkey", ] +[[package]] +name = "solana-program-error" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1af32c995a7b692a915bb7414d5f8e838450cf7c70414e763d8abcae7b51f28" + [[package]] name = "solana-program-memory" version = "2.2.1" @@ -7724,7 +7866,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b0268f6c89825fb634a34bd0c3b8fdaeaecfc3728be1d622a8ee6dd577b60d4" dependencies = [ "num-traits", - "solana-define-syscall", + "solana-define-syscall 2.2.1", ] [[package]] @@ -7739,7 +7881,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "319f0ef15e6e12dc37c597faccb7d62525a509fec5f6975ecb9419efddeb277b" dependencies = [ - "solana-program-error", + "solana-program-error 2.2.2", ] [[package]] @@ -7762,7 +7904,7 @@ dependencies = [ "solana-epoch-rewards", "solana-epoch-schedule", "solana-feature-set", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-last-restart-slot", "solana-log-collector", @@ -7780,7 +7922,7 @@ dependencies = [ "solana-timings", "solana-transaction-context", "solana-type-overrides", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -7816,7 +7958,7 @@ dependencies = [ "solana-svm 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "solana-timings", "solana-vote-program", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", ] @@ -7832,7 +7974,7 @@ dependencies = [ "bytemuck", "bytemuck_derive", "curve25519-dalek 4.1.3", - "five8_const", + "five8_const 0.1.4", "getrandom 0.2.16", "js-sys", "num-traits", @@ -7841,9 +7983,9 @@ dependencies = [ "serde_derive", "solana-atomic-u64", "solana-decode-error", - "solana-define-syscall", + "solana-define-syscall 2.2.1", "solana-sanitize", - "solana-sha256-hasher", + "solana-sha256-hasher 2.2.1", "wasm-bindgen", ] @@ -7866,7 +8008,7 @@ dependencies = [ "solana-pubkey", "solana-rpc-client-api", "solana-signature", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-stream", "tokio-tungstenite", @@ -7901,7 +8043,7 @@ dependencies = [ "solana-streamer", "solana-tls-utils", "solana-transaction-error", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", ] @@ -8011,7 +8153,7 @@ dependencies = [ "solana-epoch-info", "solana-epoch-schedule", "solana-feature-gate-interface", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-message", "solana-pubkey", @@ -8052,7 +8194,7 @@ dependencies = [ "solana-transaction-error", "solana-transaction-status-client-types", "solana-version", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -8063,13 +8205,13 @@ checksum = "0244e2bf439ec424179414173cdc8b43e34371608752799c5610bf17430eee18" dependencies = [ "solana-account", "solana-commitment-config", - "solana-hash", + "solana-hash 2.2.1", "solana-message", "solana-nonce", "solana-pubkey", "solana-rpc-client", "solana-sdk-ids", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -8154,7 +8296,7 @@ dependencies = [ "symlink", "tar", "tempfile", - "thiserror 2.0.17", + "thiserror 2.0.18", "zstd", ] @@ -8168,7 +8310,7 @@ dependencies = [ "log", "solana-compute-budget", "solana-compute-budget-instruction", - "solana-hash", + "solana-hash 2.2.1", "solana-message", "solana-pubkey", "solana-sdk-ids", @@ -8176,7 +8318,7 @@ dependencies = [ "solana-svm-transaction", "solana-transaction", "solana-transaction-error", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -8269,7 +8411,7 @@ dependencies = [ "solana-transaction-context", "solana-transaction-error", "solana-validator-exit", - "thiserror 2.0.17", + "thiserror 2.0.18", "wasm-bindgen", ] @@ -8291,7 +8433,7 @@ dependencies = [ "bs58", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8320,8 +8462,8 @@ checksum = "baa3120b6cdaa270f39444f5093a90a7b03d296d362878f7a6991d6de3bbe496" dependencies = [ "borsh 1.6.0", "libsecp256k1", - "solana-define-syscall", - "thiserror 2.0.17", + "solana-define-syscall 2.2.1", + "thiserror 2.0.18", ] [[package]] @@ -8422,8 +8564,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0037386961c0d633421f53560ad7c80675c0447cba4d1bb66d60974dd486c7ea" dependencies = [ "sha2 0.10.9", - "solana-define-syscall", - "solana-hash", + "solana-define-syscall 2.2.1", + "solana-hash 2.2.1", +] + +[[package]] +name = "solana-sha256-hasher" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db7dc3011ea4c0334aaaa7e7128cb390ecf546b28d412e9bf2064680f57f588f" +dependencies = [ + "sha2 0.10.9", + "solana-define-syscall 4.0.1", + "solana-hash 4.2.0", ] [[package]] @@ -8442,8 +8595,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afd3db0461089d1ad1a78d9ba3f15b563899ca2386351d38428faa5350c60a98" dependencies = [ "solana-hard-forks", - "solana-hash", - "solana-sha256-hasher", + "solana-hash 2.2.1", + "solana-sha256-hasher 2.2.1", ] [[package]] @@ -8480,7 +8633,7 @@ checksum = "0c8691982114513763e88d04094c9caa0376b867a29577939011331134c301ce" dependencies = [ "serde", "serde_derive", - "solana-hash", + "solana-hash 2.2.1", "solana-sdk-ids", "solana-sysvar-id", ] @@ -8523,7 +8676,7 @@ dependencies = [ "solana-cpi", "solana-decode-error", "solana-instruction", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "solana-system-interface", "solana-sysvar-id", @@ -8568,7 +8721,7 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-message", "solana-pubkey", @@ -8621,7 +8774,7 @@ dependencies = [ "solana-tls-utils", "solana-transaction-error", "solana-transaction-metrics-tracker", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-util 0.7.17", "x509-parser", @@ -8646,7 +8799,7 @@ dependencies = [ "solana-compute-budget-instruction", "solana-feature-set", "solana-fee-structure", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-instructions-sysvar", "solana-loader-v4-program", @@ -8669,7 +8822,7 @@ dependencies = [ "solana-transaction-context", "solana-transaction-error", "solana-type-overrides", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -8690,7 +8843,7 @@ dependencies = [ "solana-compute-budget-instruction", "solana-feature-set", "solana-fee-structure", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-instructions-sysvar", "solana-loader-v4-program", @@ -8714,7 +8867,7 @@ dependencies = [ "solana-transaction-context", "solana-transaction-error", "solana-type-overrides", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -8732,7 +8885,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fc4392f0eed412141a376e99dfb052069b96f13697a9abb335504babe29387a" dependencies = [ - "solana-hash", + "solana-hash 2.2.1", "solana-message", "solana-pubkey", "solana-sdk-ids", @@ -8788,7 +8941,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bd98a25e5bcba8b6be8bcbb7b84b24c2a6a8178d7fb0e3077a916855ceba91a" dependencies = [ - "solana-hash", + "solana-hash 2.2.1", "solana-keypair", "solana-message", "solana-pubkey", @@ -8812,16 +8965,16 @@ dependencies = [ "serde_derive", "solana-account-info", "solana-clock", - "solana-define-syscall", + "solana-define-syscall 2.2.1", "solana-epoch-rewards", "solana-epoch-schedule", "solana-fee-calculator", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-instructions-sysvar", "solana-last-restart-slot", "solana-program-entrypoint", - "solana-program-error", + "solana-program-error 2.2.2", "solana-program-memory", "solana-pubkey", "solana-rent", @@ -8859,7 +9012,7 @@ dependencies = [ "solana-commitment-config", "solana-connection-cache", "solana-epoch-info", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-message", @@ -8933,7 +9086,7 @@ dependencies = [ "solana-signer", "solana-transaction", "solana-transaction-error", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", ] @@ -8948,7 +9101,7 @@ dependencies = [ "serde_derive", "solana-bincode", "solana-feature-set", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-message", @@ -9028,7 +9181,7 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-clock", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-loader-v2-interface", "solana-message", @@ -9048,7 +9201,7 @@ dependencies = [ "spl-token-2022 7.0.0", "spl-token-group-interface", "spl-token-metadata-interface", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -9071,7 +9224,7 @@ dependencies = [ "solana-transaction", "solana-transaction-context", "solana-transaction-error", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -9096,7 +9249,7 @@ dependencies = [ "solana-net-utils", "solana-streamer", "solana-transaction-error", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", ] @@ -9146,7 +9299,7 @@ dependencies = [ "solana-account", "solana-bincode", "solana-clock", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-packet", "solana-pubkey", @@ -9155,7 +9308,7 @@ dependencies = [ "solana-svm-transaction", "solana-transaction", "solana-vote-interface", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -9171,7 +9324,7 @@ dependencies = [ "serde_derive", "solana-clock", "solana-decode-error", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-pubkey", "solana-rent", @@ -9199,7 +9352,7 @@ dependencies = [ "solana-clock", "solana-epoch-schedule", "solana-feature-set", - "solana-hash", + "solana-hash 2.2.1", "solana-instruction", "solana-keypair", "solana-packet", @@ -9212,7 +9365,7 @@ dependencies = [ "solana-transaction", "solana-transaction-context", "solana-vote-interface", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -9263,7 +9416,7 @@ dependencies = [ "solana-signature", "solana-signer", "subtle", - "thiserror 2.0.17", + "thiserror 2.0.18", "wasm-bindgen", "zeroize", ] @@ -9317,7 +9470,7 @@ dependencies = [ "solana-signature", "solana-signer", "subtle", - "thiserror 2.0.17", + "thiserror 2.0.18", "zeroize", ] @@ -9348,7 +9501,7 @@ dependencies = [ "simdutf8", "sonic-number", "sonic-simd", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -9411,8 +9564,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7398da23554a31660f17718164e31d31900956054f54f52d5ec1be51cb4f4b3" dependencies = [ "bytemuck", - "solana-program-error", - "solana-sha256-hasher", + "solana-program-error 2.2.2", + "solana-sha256-hasher 2.2.1", "spl-discriminator-derive", ] @@ -9424,7 +9577,7 @@ checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750" dependencies = [ "quote", "spl-discriminator-syn", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9436,7 +9589,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.9", - "syn 2.0.111", + "syn 2.0.117", "thiserror 1.0.69", ] @@ -9463,7 +9616,7 @@ dependencies = [ "solana-instruction", "solana-msg", "solana-program-entrypoint", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", ] @@ -9490,11 +9643,11 @@ dependencies = [ "num-traits", "solana-decode-error", "solana-msg", - "solana-program-error", + "solana-program-error 2.2.2", "solana-program-option", "solana-pubkey", "solana-zk-sdk", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -9519,7 +9672,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.9", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9535,7 +9688,7 @@ dependencies = [ "solana-decode-error", "solana-instruction", "solana-msg", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "spl-discriminator", "spl-pod", @@ -9612,7 +9765,7 @@ dependencies = [ "spl-token-metadata-interface", "spl-transfer-hook-interface", "spl-type-length-value", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -9638,7 +9791,7 @@ dependencies = [ "solana-program", "solana-zk-sdk", "spl-pod", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -9660,7 +9813,7 @@ checksum = "0e3597628b0d2fe94e7900fd17cdb4cfbb31ee35c66f82809d27d86e44b2848b" dependencies = [ "curve25519-dalek 4.1.3", "solana-zk-sdk", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -9675,7 +9828,7 @@ dependencies = [ "solana-decode-error", "solana-instruction", "solana-msg", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "spl-discriminator", "spl-pod", @@ -9695,7 +9848,7 @@ dependencies = [ "solana-decode-error", "solana-instruction", "solana-msg", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "spl-discriminator", "spl-pod", @@ -9718,7 +9871,7 @@ dependencies = [ "solana-decode-error", "solana-instruction", "solana-msg", - "solana-program-error", + "solana-program-error 2.2.2", "solana-pubkey", "spl-discriminator", "spl-pod", @@ -9740,7 +9893,7 @@ dependencies = [ "solana-account-info", "solana-decode-error", "solana-msg", - "solana-program-error", + "solana-program-error 2.2.2", "spl-discriminator", "spl-pod", "thiserror 1.0.69", @@ -9804,7 +9957,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9832,9 +9985,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.111" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -9873,7 +10026,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -10206,11 +10359,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.17", + "thiserror-impl 2.0.18", ] [[package]] @@ -10221,18 +10374,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -10325,7 +10478,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -10570,7 +10723,7 @@ dependencies = [ "proc-macro2", "prost-build 0.12.6", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -10584,7 +10737,7 @@ dependencies = [ "prost-build 0.13.5", "prost-types 0.13.5", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -10666,7 +10819,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -10995,7 +11148,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", "wasm-bindgen-shared", ] @@ -11113,6 +11266,31 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "wincode" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "466e67917609b2d40a838a5b972d1a6237c9749600cb8de8f65559b90d48485b" +dependencies = [ + "pastey", + "proc-macro2", + "quote", + "thiserror 2.0.18", + "wincode-derive", +] + +[[package]] +name = "wincode-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26a7a568eda854acc9945ed136a9d50b8c6d31911584624958808ae96eee3912" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "windows" version = "0.62.2" @@ -11166,7 +11344,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -11177,7 +11355,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -11560,6 +11738,18 @@ dependencies = [ "tap", ] +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek 4.1.3", + "rand_core 0.6.4", + "serde", + "zeroize", +] + [[package]] name = "x509-parser" version = "0.14.0" @@ -11622,7 +11812,7 @@ dependencies = [ "solana-account", "solana-account-decoder", "solana-clock", - "solana-hash", + "solana-hash 2.2.1", "solana-message", "solana-pubkey", "solana-signature", @@ -11653,7 +11843,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", "synstructure 0.13.2", ] @@ -11674,7 +11864,7 @@ checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -11694,7 +11884,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", "synstructure 0.13.2", ] @@ -11715,7 +11905,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -11748,7 +11938,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] diff --git a/test-integration/test-chainlink/src/ixtest_context.rs b/test-integration/test-chainlink/src/ixtest_context.rs index 9509bc0dc..d0286aca6 100644 --- a/test-integration/test-chainlink/src/ixtest_context.rs +++ b/test-integration/test-chainlink/src/ixtest_context.rs @@ -101,6 +101,7 @@ impl IxtestContext { pubkey, account: program_stub.clone(), commit_frequency_ms: None, + delegation_actions: vec![], delegated_to_other: None, }) .await From 9e2b9e926f689e698fe39fc5613116f2d4aff439 Mon Sep 17 00:00:00 2001 From: Sarfaraz Nawaz Date: Wed, 25 Feb 2026 21:25:02 +0530 Subject: [PATCH 2/2] remove parse_delegation_actions and instead make parse_delegation_record return actions --- .../src/scheduled_commits_processor.rs | 2 +- .../chainlink/fetch_cloner/ata_projection.rs | 11 +- .../src/chainlink/fetch_cloner/delegation.rs | 50 +++--- .../src/chainlink/fetch_cloner/mod.rs | 97 +++++------- .../src/chainlink/fetch_cloner/pipeline.rs | 145 +++++++----------- magicblock-chainlink/src/cloner/mod.rs | 41 ++++- .../test-chainlink/src/ixtest_context.rs | 4 +- 7 files changed, 177 insertions(+), 173 deletions(-) diff --git a/magicblock-accounts/src/scheduled_commits_processor.rs b/magicblock-accounts/src/scheduled_commits_processor.rs index 88c4ed4ed..3c3440366 100644 --- a/magicblock-accounts/src/scheduled_commits_processor.rs +++ b/magicblock-accounts/src/scheduled_commits_processor.rs @@ -238,7 +238,7 @@ impl ScheduledCommitsProcessorImpl { .map(|finalize| vec![commit, finalize]) .unwrap_or(vec![commit]) }) - .unwrap_or(vec![]) + .unwrap_or_default() } }; let patched_errors = result diff --git a/magicblock-chainlink/src/chainlink/fetch_cloner/ata_projection.rs b/magicblock-chainlink/src/chainlink/fetch_cloner/ata_projection.rs index b1483e2ab..b6b918613 100644 --- a/magicblock-chainlink/src/chainlink/fetch_cloner/ata_projection.rs +++ b/magicblock-chainlink/src/chainlink/fetch_cloner/ata_projection.rs @@ -12,7 +12,7 @@ use tracing::*; use super::{delegation, types::AccountWithCompanion, FetchCloner}; use crate::{ - cloner::{AccountCloneRequest, Cloner}, + cloner::{AccountCloneRequest, Cloner, DelegationActions}, remote_account_provider::{ChainPubsubClient, ChainRpcClient}, }; @@ -127,15 +127,16 @@ where ) .await { + let (deleg_record, _delegation_actions) = deleg; delegated_to_other = - delegation::get_delegated_to_other(this, &deleg); - commit_frequency_ms = Some(deleg.commit_frequency_ms); + delegation::get_delegated_to_other(this, &deleg_record); + commit_frequency_ms = Some(deleg_record.commit_frequency_ms); if let Some(projected_ata) = this .maybe_project_delegated_ata_from_eata( ata_account.account_shared_data(), &eata_shared, - &deleg, + &deleg_record, ) { account_to_clone = projected_ata; @@ -147,7 +148,7 @@ where pubkey: ata_pubkey, account: account_to_clone, commit_frequency_ms, - delegation_actions: vec![], + delegation_actions: DelegationActions::default(), delegated_to_other, }); } diff --git a/magicblock-chainlink/src/chainlink/fetch_cloner/delegation.rs b/magicblock-chainlink/src/chainlink/fetch_cloner/delegation.rs index e6efd5df4..96b54500f 100644 --- a/magicblock-chainlink/src/chainlink/fetch_cloner/delegation.rs +++ b/magicblock-chainlink/src/chainlink/fetch_cloner/delegation.rs @@ -6,49 +6,59 @@ use magicblock_core::token_programs::EATA_PROGRAM_ID; use magicblock_metrics::metrics; use solana_account::ReadableAccount; use solana_instruction::Instruction; +use solana_program::program_error::ProgramError; use solana_pubkey::Pubkey; use tracing::*; use super::FetchCloner; use crate::{ chainlink::errors::{ChainlinkError, ChainlinkResult}, - cloner::Cloner, + cloner::{Cloner, DelegationActions}, remote_account_provider::{ ChainPubsubClient, ChainRpcClient, MatchSlotsConfig, ResolvedAccountSharedData, }, }; +/// Parses a delegation record from account data bytes. +/// Returns the parsed DelegationRecord, or InvalidDelegationRecord error +/// if parsing fails. pub(crate) fn parse_delegation_record( data: &[u8], delegation_record_pubkey: Pubkey, -) -> ChainlinkResult { - DelegationRecord::try_from_bytes_with_discriminator(data) +) -> ChainlinkResult<(DelegationRecord, Option)> { + let delegation_record_size = DelegationRecord::size_with_discriminator(); + if data.len() < delegation_record_size { + return Err(ChainlinkError::InvalidDelegationRecord( + delegation_record_pubkey, + ProgramError::InvalidAccountData, + )); + } + let record = + DelegationRecord::try_from_bytes_with_discriminator( + &data[..delegation_record_size], + ) .copied() .map_err(|err| { ChainlinkError::InvalidDelegationRecord( delegation_record_pubkey, err, ) - }) -} + })?; -pub(crate) fn parse_delegation_actions( - data: &[u8], - delegation_record_pubkey: Pubkey, -) -> ChainlinkResult> { - let delegation_record_size = DelegationRecord::size_with_discriminator(); if data.len() <= delegation_record_size { - return Ok(vec![]); + Ok((record, None)) + } else { + let actions_data = &data[delegation_record_size..]; + let actions = bincode::deserialize::>(actions_data) + .map_err(|err| { + ChainlinkError::InvalidDelegationActions( + delegation_record_pubkey, + err.to_string(), + ) + })?; + Ok((record, Some(actions.into()))) } - - let actions_data = &data[delegation_record_size..]; - bincode::deserialize::>(actions_data).map_err(|err| { - ChainlinkError::InvalidDelegationActions( - delegation_record_pubkey, - err.to_string(), - ) - }) } pub(crate) fn apply_delegation_record_to_account( @@ -106,7 +116,7 @@ pub(crate) async fn fetch_and_parse_delegation_record( account_pubkey: Pubkey, min_context_slot: u64, fetch_origin: metrics::AccountFetchOrigin, -) -> Option +) -> Option<(DelegationRecord, Option)> where T: ChainRpcClient, U: ChainPubsubClient, diff --git a/magicblock-chainlink/src/chainlink/fetch_cloner/mod.rs b/magicblock-chainlink/src/chainlink/fetch_cloner/mod.rs index 84906dcd0..b2dadc084 100644 --- a/magicblock-chainlink/src/chainlink/fetch_cloner/mod.rs +++ b/magicblock-chainlink/src/chainlink/fetch_cloner/mod.rs @@ -50,7 +50,10 @@ use crate::{ account_still_undelegating_on_chain::account_still_undelegating_on_chain, blacklisted_accounts::blacklisted_accounts, }, - cloner::{errors::ClonerResult, AccountCloneRequest, Cloner}, + cloner::{ + errors::ClonerResult, AccountCloneRequest, Cloner, + DelegationActions, + }, remote_account_provider::{ program_account::get_loaderv3_get_program_data_address, ChainPubsubClient, ChainRpcClient, ForwardedSubscriptionUpdate, @@ -336,7 +339,7 @@ where ) -> ( Option, Option, - Vec, + DelegationActions, ) { let ForwardedSubscriptionUpdate { pubkey, account } = update; let owned_by_delegation_program = @@ -381,34 +384,8 @@ where let account = if let Some(delegation_record) = delegation_record { - let delegation_record_size = - DelegationRecord::size_with_discriminator(); - if delegation_record.data().len() - == delegation_record_size - { - // Regular delegation record layout. - } else { - // DelegateWithActions layout (DelegationRecord + trailing bytes). - } - - let delegation_actions = - match Self::parse_delegation_actions( - delegation_record.data(), - delegation_record_pubkey, - ) { - Ok(actions) => actions, - Err(err) => { - error!( - pubkey = %pubkey, - error = %err, - "Failed to parse delegation actions" - ); - vec![] - } - }; - - let delegation_record = - match Self::parse_delegation_record( + let delegation_record_with_actions = + match delegation::parse_delegation_record( delegation_record.data(), delegation_record_pubkey, ) { @@ -425,7 +402,11 @@ where // If the delegation record is valid we set the owner and delegation // status on the account - if let Some(delegation_record) = delegation_record { + if let Some(( + delegation_record, + delegation_actions, + )) = delegation_record_with_actions + { if tracing::enabled!(tracing::Level::TRACE) { let delegation_record_display = format!("{:?}", delegation_record); @@ -469,25 +450,26 @@ where ( Some(account.into_account_shared_data()), Some(delegation_record), - delegation_actions, + delegation_actions.unwrap_or_default(), ) } else { // If the delegation record is invalid we cannot clone the account // since something is corrupt and we wouldn't know what owner to // use, etc. - (None, None, vec![]) + ( + None, + None, + DelegationActions::default(), + ) } } else { // If no delegation record exists we must assume the account itself is // a delegation record or metadata - let delegation_record_size = - DelegationRecord::size_with_discriminator(); - if account.data().len() == delegation_record_size { - // Regular delegation record layout. - } else { - // DelegateWithActions layout (DelegationRecord + trailing bytes). - } - (Some(account.into_account_shared_data()), None, vec![]) + ( + Some(account.into_account_shared_data()), + None, + DelegationActions::default(), + ) }; if !subs_to_remove.is_empty() { @@ -506,7 +488,7 @@ where error = %err, "Failed to fetch delegation record" ); - (None, None, vec![]) + (None, None, DelegationActions::default()) } Err(err) => { error!( @@ -514,20 +496,24 @@ where error = %err, "Failed to fetch delegation record" ); - (None, None, vec![]) + (None, None, DelegationActions::default()) } } } else { let (account, deleg_record) = self .maybe_project_ata_from_subscription_update(pubkey, account) .await; - (Some(account), deleg_record, vec![]) + ( + Some(account), + deleg_record, + DelegationActions::default(), + ) } } else { // This should not happen since we call this method with sub updates which always hold // a fresh remote account error!(pubkey = %pubkey, account = ?account, "BUG: Received subscription update without fresh account"); - (None, None, vec![]) + (None, None, DelegationActions::default()) } } @@ -586,7 +572,7 @@ where pubkey: ata_pubkey, account: projected_ata, commit_frequency_ms: None, - delegation_actions: vec![], + delegation_actions: DelegationActions::default(), delegated_to_other: None, }) } @@ -654,6 +640,7 @@ where let Some(deleg_record) = deleg_record else { return (ata_account, None); }; + let (deleg_record, _delegation_actions) = deleg_record; if let Some(projected_ata) = self.maybe_project_delegated_ata_from_eata( &ata_account, @@ -695,17 +682,10 @@ where fn parse_delegation_record( data: &[u8], delegation_record_pubkey: Pubkey, - ) -> ChainlinkResult { + ) -> ChainlinkResult<(DelegationRecord, Option)> { delegation::parse_delegation_record(data, delegation_record_pubkey) } - fn parse_delegation_actions( - data: &[u8], - delegation_record_pubkey: Pubkey, - ) -> ChainlinkResult> { - delegation::parse_delegation_actions(data, delegation_record_pubkey) - } - /// Applies delegation record settings to an account: sets the owner, /// delegation status, and confined status based on the delegation /// record's authority field. @@ -738,7 +718,7 @@ where account_pubkey: Pubkey, min_context_slot: u64, fetch_origin: metrics::AccountFetchOrigin, - ) -> Option { + ) -> Option<(DelegationRecord, Option)> { delegation::fetch_and_parse_delegation_record( self, account_pubkey, @@ -983,9 +963,10 @@ where } let delegated_on_chain = deleg_record.as_ref().is_some_and(|dr| { - dr.authority.eq(&self.validator_pubkey) - || dr.authority.eq(&Pubkey::default()) + dr.0.authority.eq(&self.validator_pubkey) + || dr.0.authority.eq(&Pubkey::default()) }); + let deleg_record = deleg_record.map(|el| el.0); if !account_still_undelegating_on_chain( pubkey, delegated_on_chain, @@ -1414,7 +1395,7 @@ where pubkey, account, commit_frequency_ms: None, - delegation_actions: vec![], + delegation_actions: DelegationActions::default(), delegated_to_other: None, }) .await?; diff --git a/magicblock-chainlink/src/chainlink/fetch_cloner/pipeline.rs b/magicblock-chainlink/src/chainlink/fetch_cloner/pipeline.rs index 2ba7e10b5..9efc2664e 100644 --- a/magicblock-chainlink/src/chainlink/fetch_cloner/pipeline.rs +++ b/magicblock-chainlink/src/chainlink/fetch_cloner/pipeline.rs @@ -19,7 +19,10 @@ use super::{ }; use crate::{ chainlink::errors::{ChainlinkError, ChainlinkResult}, - cloner::{errors::ClonerResult, AccountCloneRequest, Cloner}, + cloner::{ + errors::ClonerResult, AccountCloneRequest, Cloner, + DelegationActions, + }, remote_account_provider::{ program_account::{ get_loaderv3_get_program_data_address, ProgramAccountResolver, @@ -143,7 +146,7 @@ fn classify_single_account( pubkey, account: account_shared_data, commit_frequency_ms: None, - delegation_actions: vec![], + delegation_actions: DelegationActions::default(), delegated_to_other: None, }); } @@ -293,92 +296,62 @@ where record_subs.push(delegation_record_pubkey); // If the account is delegated we set the owner and delegation state - let (commit_frequency_ms, delegated_to_other, delegation_actions) = if let Some( - delegation_record_data, - ) = - delegation_record - { - let delegation_record_size = - dlp::state::DelegationRecord::size_with_discriminator(); - if delegation_record_data.data().len() == delegation_record_size - { - // Regular delegation record layout. - } else { - // DelegateWithActions layout (DelegationRecord + trailing bytes). - } - - // NOTE: failing here is fine when resolving all accounts for a transaction - // since if something is off we better not run it anyways - // However we may consider a different behavior when user is getting - // multiple accounts. - let delegation_actions = - match FetchCloner::::parse_delegation_actions( - delegation_record_data.data(), - delegation_record_pubkey, - ) { - Ok(x) => x, - Err(err) => { - // Cancel all new subs since we won't clone any accounts - cancel_subs( - &this.remote_account_provider, - CancelStrategy::New { - new_subs: pubkeys - .iter() - .cloned() - .chain(record_subs.iter().cloned()) - .collect(), - existing_subs: existing_subs.clone(), - }, - ) - .await; - return Err(err); - } - }; - - let delegation_record = - match FetchCloner::::parse_delegation_record( - delegation_record_data.data(), - delegation_record_pubkey, - ) { - Ok(x) => x, - Err(err) => { - // Cancel all new subs since we won't clone any accounts - cancel_subs( - &this.remote_account_provider, - CancelStrategy::New { - new_subs: pubkeys - .iter() - .cloned() - .chain(record_subs.iter().cloned()) - .collect(), - existing_subs: existing_subs.clone(), - }, - ) - .await; - return Err(err); - } - }; - - trace!(pubkey = %pubkey, "Delegation record found"); - - let delegated_to_other = - this.get_delegated_to_other(&delegation_record); - - let commit_freq = this.apply_delegation_record_to_account( - &mut account, - &delegation_record, - ); + let (commit_frequency_ms, delegated_to_other, delegation_actions) = + if let Some(delegation_record_data) = delegation_record { + // NOTE: failing here is fine when resolving all accounts for a transaction + // since if something is off we better not run it anyways + // However we may consider a different behavior when user is getting + // multiple accounts. + let (delegation_record, delegation_actions) = + match FetchCloner::::parse_delegation_record( + delegation_record_data.data(), + delegation_record_pubkey, + ) { + Ok(x) => x, + Err(err) => { + // Cancel all new subs since we won't clone any accounts + cancel_subs( + &this.remote_account_provider, + CancelStrategy::New { + new_subs: pubkeys + .iter() + .cloned() + .chain(record_subs.iter().cloned()) + .collect(), + existing_subs: existing_subs.clone(), + }, + ) + .await; + return Err(err); + } + }; + + trace!(pubkey = %pubkey, "Delegation record found"); + + let delegated_to_other = + this.get_delegated_to_other(&delegation_record); + + let commit_freq = this.apply_delegation_record_to_account( + &mut account, + &delegation_record, + ); - // Collect unique owner programs to subscribe concurrently after the loop - if account.delegated() { - owner_programs_to_subscribe.insert(delegation_record.owner); - } + // Collect unique owner programs to subscribe concurrently after the loop + if account.delegated() { + owner_programs_to_subscribe + .insert(delegation_record.owner); + } - (commit_freq, delegated_to_other, delegation_actions) - } else { - missing_delegation_record.push((pubkey, account.remote_slot())); - (None, None, vec![]) - }; + ( + commit_freq, + delegated_to_other, + delegation_actions.unwrap_or_default(), + ) + } else { + missing_delegation_record + .push((pubkey, account.remote_slot())); + (None, None, DelegationActions::default()) + }; accounts_to_clone.push(AccountCloneRequest { pubkey, account: account.into_account_shared_data(), diff --git a/magicblock-chainlink/src/cloner/mod.rs b/magicblock-chainlink/src/cloner/mod.rs index 9d1de024e..b90c4cbc5 100644 --- a/magicblock-chainlink/src/cloner/mod.rs +++ b/magicblock-chainlink/src/cloner/mod.rs @@ -1,5 +1,6 @@ use async_trait::async_trait; use errors::ClonerResult; +use std::ops::Deref; use solana_account::AccountSharedData; use solana_instruction::Instruction; use solana_pubkey::Pubkey; @@ -9,11 +10,49 @@ use crate::remote_account_provider::program_account::LoadedProgram; pub mod errors; +#[derive(Clone, Debug, Default, PartialEq, Eq)] +pub struct DelegationActions(Vec); + +impl DelegationActions { + pub fn is_empty(&self) -> bool { + self.0.is_empty() + } +} + +impl From> for DelegationActions { + fn from(value: Vec) -> Self { + Self(value) + } +} + +impl From for Vec { + fn from(value: DelegationActions) -> Self { + value.0 + } +} + +impl IntoIterator for DelegationActions { + type Item = Instruction; + type IntoIter = std::vec::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} + +impl Deref for DelegationActions { + type Target = [Instruction]; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + pub struct AccountCloneRequest { pub pubkey: Pubkey, pub account: AccountSharedData, pub commit_frequency_ms: Option, - pub delegation_actions: Vec, + pub delegation_actions: DelegationActions, /// If the account is delegated to another validator, /// this contains that validator's pubkey. None if account is not /// delegated to another validator. diff --git a/test-integration/test-chainlink/src/ixtest_context.rs b/test-integration/test-chainlink/src/ixtest_context.rs index d0286aca6..ad4ac1565 100644 --- a/test-integration/test-chainlink/src/ixtest_context.rs +++ b/test-integration/test-chainlink/src/ixtest_context.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use integration_test_tools::dlp_interface; use magicblock_chainlink::{ accounts_bank::mock::AccountsBankStub, - cloner::{AccountCloneRequest, Cloner}, + cloner::{AccountCloneRequest, Cloner, DelegationActions}, config::ChainlinkConfig, fetch_cloner::FetchCloner, native_program_accounts, @@ -101,7 +101,7 @@ impl IxtestContext { pubkey, account: program_stub.clone(), commit_frequency_ms: None, - delegation_actions: vec![], + delegation_actions: DelegationActions::default(), delegated_to_other: None, }) .await