diff --git a/Cargo.lock b/Cargo.lock index 18c18bf..10a1c18 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1233,6 +1233,7 @@ dependencies = [ "abi_stable", "ahash", "anchor-lang", + "arrayvec", "base64 0.22.1", "bytemuck", "bytes", diff --git a/Cargo.toml b/Cargo.toml index c159143..0a11c0f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -50,6 +50,7 @@ tokio-stream = "0.1.17" tokio-tungstenite = { version = "0.26", features = ["native-tls"] } drift-pubsub-client = { version = "0.1.1", path = "crates/pubsub-client" } +arrayvec = "0.7.6" [dev-dependencies] bytes = "1" diff --git a/README.md b/README.md index aadc786..89cd9e6 100644 --- a/README.md +++ b/README.md @@ -81,12 +81,11 @@ git clone https://github.com/drift-labs/drift-rs &&\ cd drift-rs &&\ git submodule update --init --recursive ``` + **build** ```bash # Build from source (default) CARGO_DRIFT_FFI_STATIC=1 -# on linux distros may need to run `ldconfig` to link -ldconfig # Provide a prebuilt drift_ffi_sys lib CARGO_DRIFT_FFI_PATH="/path/to/libdrift_ffi_sys" diff --git a/build.rs b/build.rs index 8ebef99..b844e0f 100644 --- a/build.rs +++ b/build.rs @@ -84,13 +84,29 @@ fn build_ffi_lib(current_dir: &Path) -> Result<(), Box> { // Build the library let profile = std::env::var("PROFILE")?; let drift_ffi_sys_crate = current_dir.join("crates/drift-ffi-sys"); - + // Check if submodule was cloned/exists + check_submodule_exists(&drift_ffi_sys_crate)?; build_with_toolchain(&drift_ffi_sys_crate, lib_target, &profile)?; install_library(&drift_ffi_sys_crate, &profile, lib_ext)?; Ok(()) } +fn check_submodule_exists(crate_path: &Path) -> Result<(), Box> { + // Check if the Cargo.toml file exists in the submodule directory + let cargo_toml_path = crate_path.join("Cargo.toml"); + + if !cargo_toml_path.exists() { + println!("cargo:warning=drift-ffi-sys submodule not found"); + return Err(format!( + "drift-ffi-sys submodule not initialized: {} not found. Run 'git submodule update --init --recursive'", + cargo_toml_path.display() + ).into()); + } + + Ok(()) +} + fn get_platform_details( host_target: &str, ) -> Result<(&'static str, &'static str), Box> { diff --git a/crates/src/ffi.rs b/crates/src/ffi.rs index fdaddf8..6fdfcaf 100644 --- a/crates/src/ffi.rs +++ b/crates/src/ffi.rs @@ -123,6 +123,13 @@ extern "C" { order_params: &types::OrderParams, accounts: &mut AccountsList, ) -> FfiResult; + #[allow(improper_ctypes)] + pub fn order_params_will_auction_params_sanitize( + order_params: &types::OrderParams, + perp_market: &accounts::PerpMarket, + oracle_price: i64, + is_signed_msg: bool, + ) -> FfiResult; } // @@ -188,6 +195,27 @@ pub fn simulate_place_perp_order( to_sdk_result(res) } +/// Simulates using the program's update_perp_auction_params func to determine if +/// an order's auction params will get sanitized +/// +/// Returns `true` if the order's auctions will get sanitized +pub fn simulate_will_auction_params_sanitize( + order_params: &mut types::OrderParams, + perp_market: &accounts::PerpMarket, + oracle_price: i64, + is_signed_msg: bool, +) -> SdkResult { + let res = unsafe { + order_params_will_auction_params_sanitize( + order_params, + perp_market, + oracle_price, + is_signed_msg, + ) + }; + to_sdk_result(res) +} + impl types::SpotPosition { pub fn is_available(&self) -> bool { unsafe { spot_position_is_available(self) } diff --git a/crates/src/lib.rs b/crates/src/lib.rs index f3373f9..19c4b9b 100644 --- a/crates/src/lib.rs +++ b/crates/src/lib.rs @@ -1172,7 +1172,7 @@ pub struct TransactionBuilder<'a> { ixs: Vec, /// use legacy transaction mode legacy: bool, - /// add additional lookup tables (v0 only) + /// Tx lookup tables (v0 only) lookup_tables: Vec, /// some markets forced to include in the tx accounts list force_markets: ForceMarkets, @@ -1712,10 +1712,7 @@ impl<'a> TransactionBuilder<'a> { authority: self.authority, user: self.sub_account, user_stats: Wallet::derive_stats_account(&self.authority), - taker: Wallet::derive_user_account( - &taker_account.authority, - signed_order_info.taker_subaccount_id(), - ), + taker: signed_order_info.taker_subaccount(), taker_stats: Wallet::derive_stats_account(&taker_account.authority), taker_signed_msg_user_orders: Wallet::derive_swift_order_account( &taker_account.authority, @@ -1729,11 +1726,11 @@ impl<'a> TransactionBuilder<'a> { ); if taker_account_referrer != &DEFAULT_PUBKEY { + accounts.push(AccountMeta::new(*taker_account_referrer, false)); accounts.push(AccountMeta::new( Wallet::derive_stats_account(taker_account_referrer), false, )); - accounts.push(AccountMeta::new(*taker_account_referrer, false)); } self.ixs.push(Instruction { @@ -1755,7 +1752,7 @@ impl<'a> TransactionBuilder<'a> { /// or see `place_and_make_swift_order` /// /// * `signed_order_info` - the signed swift order info - /// * `taker_account` - taker account data (authority of the swift order) + /// * `taker_account` - taker subaccount data /// pub fn place_swift_order( mut self, @@ -1768,16 +1765,13 @@ impl<'a> TransactionBuilder<'a> { "only swift perps are supported" ); - let perp_writable = [MarketId::perp(order_params.market_index)]; + let perp_readable = [MarketId::perp(order_params.market_index)]; let accounts = build_accounts( self.program_data, types::accounts::PlaceSignedMsgTakerOrder { state: *state_account(), authority: self.authority, - user: Wallet::derive_user_account( - &taker_account.authority, - signed_order_info.taker_subaccount_id(), - ), + user: signed_order_info.taker_subaccount(), user_stats: Wallet::derive_stats_account(&taker_account.authority), signed_msg_user_orders: Wallet::derive_swift_order_account( &taker_account.authority, @@ -1785,10 +1779,10 @@ impl<'a> TransactionBuilder<'a> { ix_sysvar: SYSVAR_INSTRUCTIONS_PUBKEY, }, &[taker_account], - self.force_markets.readable.iter(), - perp_writable + perp_readable .iter() - .chain(self.force_markets.writeable.iter()), + .chain(self.force_markets.readable.iter()), + self.force_markets.writeable.iter(), ); let swift_taker_ix_data = signed_order_info.to_ix_data(); diff --git a/crates/src/swift_order_subscriber.rs b/crates/src/swift_order_subscriber.rs index 5b0d44c..199dd9c 100644 --- a/crates/src/swift_order_subscriber.rs +++ b/crates/src/swift_order_subscriber.rs @@ -3,20 +3,25 @@ use std::{ time::{SystemTime, UNIX_EPOCH}, }; -use anchor_lang::{AnchorDeserialize, AnchorSerialize, Space}; +use anchor_lang::{ + prelude::borsh::{self}, + AnchorDeserialize, AnchorSerialize, InitSpace, Space, +}; +use arrayvec::ArrayVec; use base64::Engine; use futures_util::{SinkExt, StreamExt}; use serde::Deserialize; use serde_json::{json, Value}; -use solana_sdk::{pubkey::Pubkey, signature::Signature}; +use solana_sdk::{clock::Slot, pubkey::Pubkey, signature::Signature}; use tokio_stream::wrappers::ReceiverStream; use tokio_tungstenite::{connect_async, tungstenite::Message}; +pub use crate::types::SignedMsgOrderParamsDelegateMessage as SignedDelegateOrder; pub use crate::types::SignedMsgOrderParamsMessage as SignedOrder; use crate::{ constants::MarketExt, types::{Context, MarketId, OrderParams, SdkError, SdkResult}, - DriftClient, + DriftClient, Wallet, }; /// Swift message discriminator (Anchor) @@ -26,20 +31,92 @@ const SWIFT_MSG_PREFIX: LazyCell<[u8; 8]> = LazyCell::new(|| { .unwrap() }); +/// Swift message discriminator (Anchor) +const SWIFT_DELEGATE_MSG_PREFIX: LazyCell<[u8; 8]> = LazyCell::new(|| { + solana_sdk::hash::hash(b"global:SignedMsgOrderParamsDelegateMessage").to_bytes()[..8] + .try_into() + .unwrap() +}); + pub const SWIFT_DEVNET_WS_URL: &str = "wss://master.swift.drift.trade"; pub const SWIFT_MAINNET_WS_URL: &str = "wss://swift.drift.trade"; const LOG_TARGET: &str = "swift"; +/// Wrapper for a signed order message (aka swift order) + +/// Common fields of signed message types +pub struct SignedMessageInfo { + pub taker_pubkey: Pubkey, + pub order_params: OrderParams, + pub uuid: [u8; 8], + pub slot: Slot, +} + +/// It can be either signed by the authority keypair or an authorized delegate +#[derive(Clone, Debug, PartialEq, AnchorSerialize, AnchorDeserialize, InitSpace, Copy)] +pub enum SignedOrderType { + /// Swift order signed by authority keypair + Authority(SignedOrder), + /// Swift order signed by a delegated keypair + Delegated(SignedDelegateOrder), +} + +impl SignedOrderType { + /// Returns true if this is a delegated signed msg order + pub fn is_delegated(&self) -> bool { + matches!(self, Self::Delegated(_)) + } + /// Serialize as a borsh buffer + /// + /// This differs from `AnchorSerialize` as it does _not_ encode the enum byte + /// + /// DEV: Swift clients do not encode or decode the enum byte + pub fn to_borsh(&self) -> ArrayVec { + // SignedOrderType::INIT_SPACE (max variant size) -1 (no enum byte) +8 (anchor discriminator len) + let mut buf = ArrayVec::new(); + match self { + Self::Authority(ref x) => { + (*SWIFT_MSG_PREFIX).serialize(&mut buf).unwrap(); + x.serialize(&mut buf).unwrap(); + } + Self::Delegated(ref x) => { + (*SWIFT_DELEGATE_MSG_PREFIX).serialize(&mut buf).unwrap(); + x.serialize(&mut buf).unwrap(); + } + } + + buf + } + + pub fn info(&self, taker_authority: &Pubkey) -> SignedMessageInfo { + match self { + Self::Authority(x) => SignedMessageInfo { + taker_pubkey: Wallet::derive_user_account(taker_authority, x.sub_account_id), + order_params: x.signed_msg_order_params, + uuid: x.uuid, + slot: x.slot, + }, + Self::Delegated(x) => SignedMessageInfo { + taker_pubkey: x.taker_pubkey, + order_params: x.signed_msg_order_params, + uuid: x.uuid, + slot: x.slot, + }, + } + } +} + +/// Order notification from Websocket #[derive(Clone, Deserialize)] -pub struct OrderNotification<'a> { +struct OrderNotification<'a> { #[allow(dead_code)] channel: &'a str, order: SignedOrderInfo, } #[derive(Deserialize)] -pub struct Heartbeat { +struct Heartbeat { #[serde(deserialize_with = "deser_int_str", rename = "message")] ts: u64, } @@ -64,8 +141,8 @@ pub struct SignedOrderInfo { pub signer: Pubkey, /// hex-ified, borsh encoded signed order message /// this is the signed/verified payload for onchain use - #[serde(rename = "order_message", deserialize_with = "deser_order_message")] - order: SignedOrder, + #[serde(rename = "order_message", deserialize_with = "deser_signed_msg_type")] + order: SignedOrderType, /// Signature over the serialized `order` payload #[serde(rename = "order_signature", deserialize_with = "deser_signature")] pub signature: Signature, @@ -78,24 +155,32 @@ impl SignedOrderInfo { } /// The order's UUID (raw) pub fn order_uuid(&self) -> [u8; 8] { - self.order.uuid + match self.order { + SignedOrderType::Authority(inner) => inner.uuid, + SignedOrderType::Delegated(inner) => inner.uuid, + } } /// The drift order params of the message pub fn order_params(&self) -> OrderParams { - self.order.signed_msg_order_params + match self.order { + SignedOrderType::Authority(inner) => inner.signed_msg_order_params, + SignedOrderType::Delegated(inner) => inner.signed_msg_order_params, + } } - /// The taker sub-account_id of the order - pub fn taker_subaccount_id(&self) -> u16 { - self.order.sub_account_id + /// Get the taker sub-account for the order + /// + /// `taker_authority` - the Authority pubkey of the taker's sub-account + pub fn taker_subaccount(&self) -> Pubkey { + match self.order { + SignedOrderType::Authority(inner) => { + Wallet::derive_user_account(&self.taker_authority, inner.sub_account_id) + } + SignedOrderType::Delegated(inner) => inner.taker_pubkey, + } } /// serialize the order message for onchain use e.g. signature verification pub fn encode_for_signing(&self) -> Vec { - let mut buf = Vec::with_capacity(SignedOrder::INIT_SPACE + 8); - buf.extend_from_slice(SWIFT_MSG_PREFIX.as_slice()); - self.order - .serialize(&mut buf) - .expect("swift msg serialized"); - hex::encode(buf).into_bytes() + hex::encode(self.order.to_borsh()).into_bytes() } /// convert swift order into anchor ix data pub fn to_ix_data(&self) -> Vec { @@ -108,9 +193,27 @@ impl SignedOrderInfo { ] .concat() } - /// True if the message was signed by an identity other than the authority i.e a delegated + + /// Returns true if the order was signed using delegated authority pub fn using_delegate_signing(&self) -> bool { - self.taker_authority != self.signer + self.order.is_delegated() + } + + pub fn new( + uuid: String, + taker_authority: Pubkey, + signer: Pubkey, + order: SignedOrderType, + signature: Signature, + ) -> Self { + Self { + uuid, + ts: unix_now_ms(), + taker_authority, + signer, + order, + signature, + } } } @@ -276,28 +379,49 @@ where Ok(Signature::try_from(base64::engine::general_purpose::STANDARD.decode(s).unwrap()).unwrap()) } -fn deser_order_message<'de, D>(deserializer: D) -> Result +fn deser_int_str<'de, D>(deserializer: D) -> Result where D: serde::de::Deserializer<'de>, { - let order_message: &str = serde::de::Deserialize::deserialize(deserializer)?; - let order_message_buf = hex::decode(order_message).expect("valid hex"); - Ok(AnchorDeserialize::deserialize(&mut &order_message_buf[8..]) - .expect("SignedMsgOrderParams deser")) + let s: &str = serde::de::Deserialize::deserialize(deserializer)?; + Ok(s.parse().unwrap()) } -fn deser_int_str<'de, D>(deserializer: D) -> Result +/// Deserialize hex-ified, borsh bytes as a `SignedOrderType` +pub fn deser_signed_msg_type<'de, D>(deserializer: D) -> Result where - D: serde::de::Deserializer<'de>, + D: serde::Deserializer<'de>, { - let s: &str = serde::de::Deserialize::deserialize(deserializer)?; - Ok(s.parse().unwrap()) + let payload: &[u8] = serde::Deserialize::deserialize(deserializer)?; + if payload.len() % 2 != 0 { + return Err(serde::de::Error::custom("Hex string length must be even")); + } + + // decode expecting the largest possible variant + let mut borsh_buf = [0u8; SignedDelegateOrder::INIT_SPACE + 8]; + + hex::decode_to_slice(payload, &mut borsh_buf[..payload.len() / 2]) + .map_err(serde::de::Error::custom)?; + + // this is basically the same as if we derived AnchorDeserialize on `SignedOrderType` _expect_ it does not + // add a u8 to distinguish the enum + if borsh_buf[..8] == *SWIFT_DELEGATE_MSG_PREFIX { + AnchorDeserialize::deserialize(&mut &borsh_buf[8..]) + .map(SignedOrderType::Delegated) + .map_err(serde::de::Error::custom) + } else { + AnchorDeserialize::deserialize(&mut &borsh_buf[8..]) + .map(SignedOrderType::Authority) + .map_err(serde::de::Error::custom) + } } #[cfg(test)] mod tests { use super::*; - use crate::types::MarketType; + use crate::types::{ + MarketType, OrderTriggerCondition, OrderType, PositionDirection, PostOnlyParam, + }; #[test] fn test_swift_order_deser() { @@ -344,4 +468,66 @@ mod tests { b"c8d5a65e2234f55d0001010080841e0000000000000000000000000002000000000000000001320124c6aa950000000001786b2f94000000000000bb64a9150000000074735730364f6d380000" ); } + + #[test] + fn deserialize_incoming_signed_message_delegated() { + let payload = serde_json::json!({ + "channel": "swift_orders_perp_2", + "order": { + "market_index": 2, + "market_type": "perp", + "order_message": "42656638c7259e230001010080841e00000000000000000000000000020000000000000000013201bb60507d000000000117c0127c00000000395311d51c1b87fd56c3b5872d1041111e51f399b12d291d981a0ea383407295272108160000000073386c754a4c5a650000", + "order_signature": "9G8luwFfeAc25HwXCgaUjrKv6yJHcMFDq4Z4uPXqom5mhwZ63YU5g7p07Kxe/AKSt5A/9OPDh3nN/c9IHjkCDA==", + "taker_authority": "4rmhwytmKH1XsgGAUyUUH7U64HS5FtT6gM8HGKAfwcFE", + "signing_authority": "GiMXQkJXLVjScmQDkoLJShBJpTh9SDPvT2AZQq8NyEBf", + "ts": 1739518796400_u64, + "uuid":"s8luJLZe" + } + }) + .to_string(); + let actual: OrderNotification<'_> = + serde_json::from_str(payload.as_str()).expect("deserializes"); + + assert_eq!( + actual.order.signer, + solana_sdk::pubkey!("GiMXQkJXLVjScmQDkoLJShBJpTh9SDPvT2AZQq8NyEBf") + ); + assert_eq!( + actual.order.taker_authority, + solana_sdk::pubkey!("4rmhwytmKH1XsgGAUyUUH7U64HS5FtT6gM8HGKAfwcFE") + ); + assert_eq!(actual.order.order_uuid_str(), "s8luJLZe"); + + if let SignedOrderType::Delegated(signed_msg) = actual.order.order { + let expected = SignedDelegateOrder { + signed_msg_order_params: OrderParams { + order_type: OrderType::Market, + market_type: MarketType::Perp, + direction: PositionDirection::Short, + user_order_id: 0, + base_asset_amount: 2000000, + price: 0, + market_index: 2, + reduce_only: false, + post_only: PostOnlyParam::None, + immediate_or_cancel: false, + max_ts: None, + trigger_price: None, + trigger_condition: OrderTriggerCondition::Above, + oracle_price_offset: None, + auction_duration: Some(50), + auction_start_price: Some(2102419643), + auction_end_price: Some(2081603607), + }, + taker_pubkey: solana_sdk::pubkey!("4rmhwytmKH1XsgGAUyUUH7U64HS5FtT6gM8HGKAfwcFE"), + slot: 369631527, + uuid: [115, 56, 108, 117, 74, 76, 90, 101], + take_profit_order_params: None, + stop_loss_order_params: None, + }; + assert_eq!(signed_msg, expected); + } else { + assert!(false, "unexpected variant"); + } + } } diff --git a/examples/swift/Cargo.lock b/examples/swift/Cargo.lock index 65bef3d..f27af17 100644 --- a/examples/swift/Cargo.lock +++ b/examples/swift/Cargo.lock @@ -109,6 +109,56 @@ dependencies = [ "zeroize", ] +[[package]] +name = "agave-feature-set" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55f86f9004ab5de0e06eb9a4b43f2a84e0f682c576fd04b0321cdde849cb9728" +dependencies = [ + "ahash", + "solana-epoch-schedule", + "solana-feature-set-interface", + "solana-hash", + "solana-pubkey", + "solana-sha256-hasher", +] + +[[package]] +name = "agave-precompiles" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25b8479b9b4b0dc1dff1eb25d8d9fdc7cb0053f15a3ff5f17e7ee419fc4179b7" +dependencies = [ + "agave-feature-set", + "bincode", + "bytemuck", + "digest 0.10.7", + "ed25519-dalek", + "lazy_static", + "libsecp256k1", + "openssl", + "sha3", + "solana-ed25519-program", + "solana-message", + "solana-precompile-error", + "solana-pubkey", + "solana-sdk-ids", + "solana-secp256k1-program", + "solana-secp256r1-program", +] + +[[package]] +name = "agave-reserved-account-keys" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da30a06e461dfb759683851b4696ce3ead81e1e79b9f735c7b324c4d0ec9ff45" +dependencies = [ + "agave-feature-set", + "lazy_static", + "solana-pubkey", + "solana-sdk-ids", +] + [[package]] name = "ahash" version = "0.8.11" @@ -389,9 +439,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.96" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" [[package]] name = "ark-bn254" @@ -542,9 +592,9 @@ checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" [[package]] name = "async-compression" -version = "0.4.18" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522" +checksum = "59a194f9d963d8099596278594b3107448656ba73831c9d8c783e613ce86da64" dependencies = [ "brotli", "flate2", @@ -556,13 +606,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.86" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -632,18 +682,18 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" dependencies = [ "serde", ] [[package]] name = "blake3" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1230237285e3e10cde447185e8975408ae24deaa67205ce684805c25bc0c7937" +checksum = "34a796731680be7931955498a16a10b2270c7762963d5d570fdbfe02dcbf314f" dependencies = [ "arrayref", "arrayvec", @@ -651,7 +701,6 @@ dependencies = [ "cfg-if", "constant_time_eq", "digest 0.10.7", - "memmap2 0.9.5", ] [[package]] @@ -684,11 +733,11 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.5" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5430e3be710b68d984d1391c854eb431a9d548640711faa54eecb1df93db91cc" +checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" dependencies = [ - "borsh-derive 1.5.5", + "borsh-derive 1.5.7", "cfg_aliases", ] @@ -707,15 +756,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.5.5" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8b668d39970baad5356d7c83a86fee3a539e6f93bf6764c97368243e17a0487" +checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" dependencies = [ "once_cell", - "proc-macro-crate 3.2.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -788,22 +837,22 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.8.1" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" +checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -814,15 +863,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.2.15" +version = "1.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c736e259eea577f443d5c86c304f9f4ae0295c43f3ba05c21f1d66b5f06001af" +checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" dependencies = [ "jobserver", "libc", @@ -849,14 +898,14 @@ checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", @@ -864,7 +913,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -898,9 +947,9 @@ dependencies = [ [[package]] name = "console" -version = "0.15.10" +version = "0.15.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" dependencies = [ "encode_unicode", "libc", @@ -1071,14 +1120,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] name = "darling" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ "darling_core", "darling_macro", @@ -1086,27 +1135,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -1174,7 +1223,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -1192,7 +1241,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -1216,17 +1265,18 @@ dependencies = [ [[package]] name = "drift-rs" -version = "1.0.0-alpha.12" +version = "1.0.0-alpha.14" dependencies = [ "abi_stable", "ahash", "anchor-lang", + "arrayvec", "base64 0.22.1", "bytemuck", "dashmap", "drift-idl-gen", "drift-pubsub-client", - "env_logger 0.11.6", + "env_logger 0.11.8", "futures-util", "hex", "log", @@ -1287,9 +1337,9 @@ dependencies = [ [[package]] name = "either" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "encode_unicode" @@ -1323,7 +1373,7 @@ checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -1351,14 +1401,14 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" dependencies = [ "anstream", "anstyle", "env_filter", - "humantime", + "jiff", "log", ] @@ -1413,9 +1463,9 @@ checksum = "2551bf44bc5f776c15044b9b94153a00198be06743e262afaaa61f11ac7523a5" [[package]] name = "flate2" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", "miniz_oxide", @@ -1507,7 +1557,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -1587,14 +1637,14 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" dependencies = [ "cfg-if", "libc", - "wasi 0.13.3+wasi-0.2.2", - "windows-targets 0.52.6", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -1747,9 +1797,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -1759,9 +1809,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" [[package]] name = "hyper" @@ -1803,14 +1853,15 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -1865,9 +1916,9 @@ dependencies = [ [[package]] name = "icu_locid_transform_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" [[package]] name = "icu_normalizer" @@ -1889,9 +1940,9 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" [[package]] name = "icu_properties" @@ -1910,9 +1961,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" [[package]] name = "icu_provider" @@ -1939,7 +1990,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -1971,9 +2022,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -2033,16 +2084,41 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jiff" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "c102670231191d07d37a35af3eb77f1f0dbf7a71be51a962dcd57ea607be7260" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cdde31a9d349f1b1f51a0b3714a5940ac022976f4b49485fc04be052b183b4c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.2", "libc", ] @@ -2088,9 +2164,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.170" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "libloading" @@ -2152,15 +2228,15 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.15" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" [[package]] name = "litemap" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "lock_api" @@ -2174,9 +2250,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.26" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "memchr" @@ -2193,15 +2269,6 @@ dependencies = [ "libc", ] -[[package]] -name = "memmap2" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" -dependencies = [ - "libc", -] - [[package]] name = "memoffset" version = "0.9.1" @@ -2329,7 +2396,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -2388,10 +2455,10 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.2.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -2411,9 +2478,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.3" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "opaque-debug" @@ -2427,7 +2494,7 @@ version = "0.10.71" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "cfg-if", "foreign-types", "libc", @@ -2444,7 +2511,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -2453,6 +2520,15 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +[[package]] +name = "openssl-src" +version = "300.4.2+3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168ce4e058f975fe43e89d9ccf78ca668601887ae736090aacc23ae353c298e2" +dependencies = [ + "cc", +] + [[package]] name = "openssl-sys" version = "0.9.106" @@ -2461,6 +2537,7 @@ checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd" dependencies = [ "cc", "libc", + "openssl-src", "pkg-config", "vcpkg", ] @@ -2532,9 +2609,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "polyval" @@ -2554,13 +2631,22 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.7.35", + "zerocopy 0.8.24", ] [[package]] @@ -2574,18 +2660,18 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] @@ -2601,13 +2687,19 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "rand" version = "0.7.3" @@ -2640,7 +2732,7 @@ checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", - "zerocopy 0.8.23", + "zerocopy 0.8.24", ] [[package]] @@ -2697,7 +2789,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.1", + "getrandom 0.3.2", ] [[package]] @@ -2711,11 +2803,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b568323e98e49e2a0899dcee453dd679fae22d69adf9b11dd508d1549b7e2f" +checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", ] [[package]] @@ -2817,9 +2909,9 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.11" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da5349ae27d3887ca812fb375b45a4fbb36d8d12d2df394968cd86e35683fe73" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", @@ -2846,11 +2938,11 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.44" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "errno", "libc", "linux-raw-sys", @@ -2890,15 +2982,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "ryu" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "schannel" @@ -2931,7 +3023,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "core-foundation", "core-foundation-sys", "libc", @@ -2950,15 +3042,15 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] @@ -2974,29 +3066,29 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.15" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] name = "serde_json" -version = "1.0.139" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -3036,7 +3128,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -3138,9 +3230,9 @@ checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", "windows-sys 0.52.0", @@ -3166,9 +3258,9 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4f852f24ba38406181563f8b5d688c3bf5f68020d5b3950724cd01ac4f407b2" +checksum = "eb7706b1e8627a09f53d63e091e1507783956d4811a756c647639ec096acc9a9" dependencies = [ "Inflector", "base64 0.22.1", @@ -3205,9 +3297,9 @@ dependencies = [ [[package]] name = "solana-account-decoder-client-types" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a95f3292a49f45f1985dd91aaf1372b38eb3a37ee24334c451b97c6af26c208b" +checksum = "2af92808cf4bc3e9e821e3f534424a6a3f06ed3450a986573d39d381ae74d923" dependencies = [ "base64 0.22.1", "bs58", @@ -3294,9 +3386,9 @@ dependencies = [ [[package]] name = "solana-bn254" -version = "2.2.1" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9abc69625158faaab02347370b91c0d8e0fe347bf9287239f0fbe8f5864d91da" +checksum = "4420f125118732833f36facf96a27e7b78314b2d642ba07fa9ffdacd8d79e243" dependencies = [ "ark-bn254", "ark-ec", @@ -3314,7 +3406,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "718333bcd0a1a7aed6655aa66bef8d7fb047944922b2d3a18f49cbc13e73d004" dependencies = [ "borsh 0.10.4", - "borsh 1.5.5", + "borsh 1.5.7", ] [[package]] @@ -3374,9 +3466,9 @@ dependencies = [ [[package]] name = "solana-compute-budget" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d285e00c769548acafa0ae5f688e237929f9e59969901456b6fefd3b236aad79" +checksum = "d4c0d0e5f8feb9ed0ae662b0a241f7171dd2931e15252189b8cc401536e1bbbe" dependencies = [ "solana-fee-structure", "solana-program-entrypoint", @@ -3388,7 +3480,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a5df17b195d312b66dccdde9beec6709766d8230cb4718c4c08854f780d0309" dependencies = [ - "borsh 1.5.5", + "borsh 1.5.7", "serde", "serde_derive", "solana-instruction", @@ -3397,9 +3489,9 @@ dependencies = [ [[package]] name = "solana-config-program" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390a90335a88581a1ab657ab8d9ccbd73711bbe55c91f51a6d40caca17c15d90" +checksum = "6106fefb1a870273529f949022cbc771a2810882b1dd518846940f72fdca9a5c" dependencies = [ "bincode", "chrono", @@ -3435,9 +3527,9 @@ dependencies = [ [[package]] name = "solana-curve25519" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa1f28fdc4acdf6d1e47eec6fea58e88a650ca08f6a779d34730a616a2a82801" +checksum = "91f23498bbf3ae4f22125a2f16f988a5a659628ea4949ca605a05191f91095d3" dependencies = [ "bytemuck", "bytemuck_derive", @@ -3475,9 +3567,9 @@ dependencies = [ [[package]] name = "solana-ed25519-program" -version = "2.2.1" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0c4dfce08d71d8f1e9b7d1b4e2c7101a8109903ad481acbbc1119a73d459f2" +checksum = "9d0fc717048fdbe5d2ee7d673d73e6a30a094002f4a29ca7630ac01b6bddec04" dependencies = [ "bytemuck", "bytemuck_derive", @@ -3578,9 +3670,9 @@ dependencies = [ [[package]] name = "solana-feature-set" -version = "2.2.1" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e1d3b52b4a014efeaaab67f14e40af3972a4be61c523d612860db8e3145529" +checksum = "92f6c09cc41059c0e03ccbee7f5d4cc0a315d68ef0d59b67eb90246adfd8cc35" dependencies = [ "ahash", "lazy_static", @@ -3590,6 +3682,16 @@ dependencies = [ "solana-sha256-hasher", ] +[[package]] +name = "solana-feature-set-interface" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02007757246e40f10aa936dae4fa27efbf8dbd6a59575a12ccc802c1aea6e708" +dependencies = [ + "ahash", + "solana-pubkey", +] + [[package]] name = "solana-fee-calculator" version = "2.2.1" @@ -3621,7 +3723,7 @@ checksum = "968dabd2b92d57131473eddbd475339da530e14f54397386abf303de3a2595a2" dependencies = [ "bincode", "chrono", - "memmap2 0.5.10", + "memmap2", "serde", "serde_derive", "solana-account", @@ -3660,7 +3762,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf7bcb14392900fe02e4e34e90234fbf0c673d4e327888410ba99fa2ba0f4e99" dependencies = [ - "borsh 1.5.5", + "borsh 1.5.7", "bs58", "bytemuck", "bytemuck_derive", @@ -3684,9 +3786,9 @@ dependencies = [ [[package]] name = "solana-inline-spl" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca7380970873fec6e10cc9bf58cf4d4e1b9c1f1169152a8904dd2ee33472d820" +checksum = "e092d19263b9f756ed7b49f8882bfd1e6a4d74186850edbab5fc88a973ffa32c" dependencies = [ "bytemuck", "solana-pubkey", @@ -3699,7 +3801,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ce496a475e5062ba5de97215ab39d9c358f9c9df4bb7f3a45a1f1a8bd9065ed" dependencies = [ "bincode", - "borsh 1.5.5", + "borsh 1.5.7", "getrandom 0.2.15", "js-sys", "num-traits", @@ -3716,7 +3818,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "427f2d0d6dc0bb49f16cef5e7f975180d2e80aab9bdd3b2af68e2d029ec63f43" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "solana-account-info", "solana-instruction", "solana-program-error", @@ -3817,9 +3919,9 @@ dependencies = [ [[package]] name = "solana-log-collector" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b79bfaade94a50a098b3187edfa3334d8bb343f9d6e4a8051ef052523b7578b4" +checksum = "315d9559c113c2c4201dd2551e74c326e95505a1448f66837fd1c85114ef9ff6" dependencies = [ "log", ] @@ -3839,9 +3941,9 @@ dependencies = [ [[package]] name = "solana-measure" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02ebaa281e5ddc309de21c1106fcf1a92018add0918e6723b4e20a142b701462" +checksum = "be62d4389acf07ff49f2a96e309792593e32c80fe137470a82c83de8a43ba0c1" [[package]] name = "solana-message" @@ -3930,7 +4032,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "004f2d2daf407b3ec1a1ca5ec34b3ccdfd6866dd2d3c7d0715004a96e4b6d127" dependencies = [ "bincode", - "bitflags 2.8.0", + "bitflags 2.9.0", "cfg_eval", "serde", "serde_derive", @@ -3994,7 +4096,7 @@ dependencies = [ "bincode", "blake3", "borsh 0.10.4", - "borsh 1.5.5", + "borsh 1.5.7", "bs58", "bytemuck", "console_error_panic_hook", @@ -4083,7 +4185,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8ae2c1a8d0d4ae865882d5770a7ebca92bab9c685e43f0461682c6c05a35bfa" dependencies = [ - "borsh 1.5.5", + "borsh 1.5.7", "num-traits", "serde", "serde_derive", @@ -4120,10 +4222,12 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f8c3106bb131b9c51085661c13cd7d42eace59228db3607c37924a90e3849a" +checksum = "6db1ef9a738c798ee7b738e592f3c66c7c01ad259f78481762b6ebf20ec2fc97" dependencies = [ + "agave-feature-set", + "agave-precompiles", "base64 0.22.1", "bincode", "enum-iterator", @@ -4137,13 +4241,11 @@ dependencies = [ "solana-compute-budget", "solana-epoch-rewards", "solana-epoch-schedule", - "solana-feature-set", "solana-hash", "solana-instruction", "solana-last-restart-slot", "solana-log-collector", "solana-measure", - "solana-precompiles", "solana-pubkey", "solana-rent", "solana-sbpf", @@ -4165,7 +4267,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40db1ff5a0f8aea2c158d78ab5f2cf897848964251d1df42fef78efd3c85b863" dependencies = [ "borsh 0.10.4", - "borsh 1.5.5", + "borsh 1.5.7", "bs58", "bytemuck", "bytemuck_derive", @@ -4258,9 +4360,9 @@ dependencies = [ [[package]] name = "solana-rpc-client" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d50223f3770315b8a09ad877589a4d6a93b65b2306573c3d64479d6f6a4866" +checksum = "f8078848ab5bbc410036994de93ea438a266bae7ef6e6e35555f807c6f7031ca" dependencies = [ "async-trait", "base64 0.22.1", @@ -4296,9 +4398,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72fbadd71bfa0fc4f5ad57045f83a0b159116c25e9e610dbc5fbc16c8d5b76a8" +checksum = "3856b35d4d12b44541a46650cb2b1e006e9264a27d0139b4d898c66b0e46f53d" dependencies = [ "anyhow", "base64 0.22.1", @@ -4350,9 +4452,9 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "2.2.1" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4808e8d7f3c931657e615042d4176b423e66f64dc99e3dc3c735a197e512029b" +checksum = "e8af90d2ce445440e0548fa4a5f96fe8b265c22041a68c942012ffadd029667d" dependencies = [ "bincode", "bs58", @@ -4437,7 +4539,7 @@ dependencies = [ "bs58", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -4464,7 +4566,7 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baa3120b6cdaa270f39444f5093a90a7b03d296d362878f7a6991d6de3bbe496" dependencies = [ - "borsh 1.5.5", + "borsh 1.5.7", "libsecp256k1", "solana-define-syscall", "thiserror 2.0.12", @@ -4472,9 +4574,9 @@ dependencies = [ [[package]] name = "solana-secp256r1-program" -version = "2.2.1" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9ea9282950921611bd9e0200da7236fbb1d4f8388942f8451bd55e9f3cb228f" +checksum = "5cda2aa1bbaceda14763c4f142a00b486f2f262cfd901bd0410649ad0404d5f7" dependencies = [ "bytemuck", "openssl", @@ -4639,7 +4741,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5269e89fde216b4d7e1d1739cf5303f8398a1ff372a81232abbee80e554a838c" dependencies = [ "borsh 0.10.4", - "borsh 1.5.5", + "borsh 1.5.7", "num-traits", "serde", "serde_derive", @@ -4739,9 +4841,9 @@ checksum = "6af261afb0e8c39252a04d026e3ea9c405342b08c871a2ad8aa5448e068c784c" [[package]] name = "solana-timings" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d395d4d467ce253958905ac4f23c07ff2627aa95b0b33cb1bee5b7f1ce7d96" +checksum = "5190a60fc62b7462a8a16b2c254bb940edd330881d851f9ab3ae17e048b3e958" dependencies = [ "eager", "enum-iterator", @@ -4750,9 +4852,9 @@ dependencies = [ [[package]] name = "solana-transaction" -version = "2.2.1" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "753b3e9afed170e4cfc0ea1e87b5dfdc6d4a50270869414edd24c6ea1f529b29" +checksum = "abec848d081beb15a324c633cd0e0ab33033318063230389895cae503ec9b544" dependencies = [ "bincode", "serde", @@ -4765,7 +4867,6 @@ dependencies = [ "solana-message", "solana-precompiles", "solana-pubkey", - "solana-reserved-account-keys", "solana-sanitize", "solana-sdk-ids", "solana-short-vec", @@ -4806,14 +4907,15 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ad8a7a6873bc7a8499184e544f6fdc2ac47cca911e73e431944788a16d4e51a" +checksum = "ce239f5c58cb92cc467b808cdbe4510037239541f59eedce5a6e8fa3a4d3dfdf" dependencies = [ "Inflector", + "agave-reserved-account-keys", "base64 0.22.1", "bincode", - "borsh 1.5.5", + "borsh 1.5.7", "bs58", "lazy_static", "log", @@ -4828,7 +4930,6 @@ dependencies = [ "solana-message", "solana-program", "solana-pubkey", - "solana-reserved-account-keys", "solana-reward-info", "solana-sdk-ids", "solana-signature", @@ -4847,9 +4948,9 @@ dependencies = [ [[package]] name = "solana-transaction-status-client-types" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bfa5dc60ad564689b7b608102d4390fec18664a9359146b7372b7a762ce7526" +checksum = "6f1a75d58495fbe48b331711a6236cb1dfcae32ea67c5bbb6468fec9e3cf449b" dependencies = [ "base64 0.22.1", "bincode", @@ -4870,9 +4971,9 @@ dependencies = [ [[package]] name = "solana-type-overrides" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c11bea3be0a97b312da47bf49d84698f9176302da2ad156cd5776464f45f638f" +checksum = "46a0e32a62e4cc70a5ed997ddee1a8f79ac9127a9f600d5c3c498f0ae34680e3" dependencies = [ "lazy_static", "rand 0.8.5", @@ -4886,23 +4987,23 @@ checksum = "7bbf6d7a3c0b28dd5335c52c0e9eae49d0ae489a8f324917faf0ded65a812c1d" [[package]] name = "solana-version" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "328666bc19351169f0f2e1c032639de7d9f4fa365fcfa5d7f58cefab32796043" +checksum = "cbff96c3f3f20978504165b84c3d0ee63ef221bf33b144389030413bd44354da" dependencies = [ + "agave-feature-set", "semver", "serde", "serde_derive", - "solana-feature-set", "solana-sanitize", "solana-serde-varint", ] [[package]] name = "solana-vote-interface" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e9f6a1651310a94cd5a1a6b7f33ade01d9e5ea38a2220becb5fd737b756514" +checksum = "6b630547b7f12ee742e1c5069951fedba0fe5cbd4786f6342a779384e2b11f71" dependencies = [ "bincode", "num-derive", @@ -4924,9 +5025,9 @@ dependencies = [ [[package]] name = "solana-zk-sdk" -version = "2.2.3" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf45055dc78b74fdced852f9ed3a6f46eb13754f88b75675d9ce2bc7f242ea9" +checksum = "25f159f6daedab6cbd42d57945b1789f2f0d859c647dd611658227ae4330e4df" dependencies = [ "aes-gcm-siv", "base64 0.22.1", @@ -4965,7 +5066,7 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76fee7d65013667032d499adc3c895e286197a35a0d3a4643c80e7fd3e9969e3" dependencies = [ - "borsh 1.5.5", + "borsh 1.5.7", "num-derive", "num-traits", "solana-program", @@ -5005,7 +5106,7 @@ checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750" dependencies = [ "quote", "spl-discriminator-syn", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -5017,7 +5118,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.98", + "syn 2.0.100", "thiserror 1.0.69", ] @@ -5050,11 +5151,11 @@ dependencies = [ [[package]] name = "spl-pod" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41a7d5950993e1ff2680bd989df298eeb169367fb2f9deeef1f132de6e4e8016" +checksum = "d994afaf86b779104b4a95ba9ca75b8ced3fdb17ee934e38cb69e72afbe17799" dependencies = [ - "borsh 1.5.5", + "borsh 1.5.7", "bytemuck", "bytemuck_derive", "num-derive", @@ -5065,7 +5166,7 @@ dependencies = [ "solana-program-option", "solana-pubkey", "solana-zk-sdk", - "thiserror 1.0.69", + "thiserror 2.0.12", ] [[package]] @@ -5090,7 +5191,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -5259,7 +5360,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfb9c89dbc877abd735f05547dcf9e6e12c00c11d6d74d8817506cab4c99fdbb" dependencies = [ - "borsh 1.5.5", + "borsh 1.5.7", "num-derive", "num-traits", "solana-borsh", @@ -5341,7 +5442,7 @@ version = "0.1.0" dependencies = [ "dotenv", "drift-rs", - "env_logger 0.11.6", + "env_logger 0.11.8", "futures-util", "solana-sdk", "tokio", @@ -5360,9 +5461,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.98" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", @@ -5383,7 +5484,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -5418,13 +5519,12 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.17.1" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ - "cfg-if", "fastrand", - "getrandom 0.3.1", + "getrandom 0.3.2", "once_cell", "rustix", "windows-sys 0.59.0", @@ -5465,7 +5565,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -5476,7 +5576,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -5491,9 +5591,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" dependencies = [ "tinyvec_macros", ] @@ -5506,9 +5606,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.43.0" +version = "1.44.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" dependencies = [ "backtrace", "bytes", @@ -5530,7 +5630,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -5580,9 +5680,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" dependencies = [ "bytes", "futures-core", @@ -5701,9 +5801,9 @@ checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-ident" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-segmentation" @@ -5828,9 +5928,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasi" -version = "0.13.3+wasi-0.2.2" +version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" dependencies = [ "wit-bindgen-rt", ] @@ -5857,7 +5957,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", "wasm-bindgen-shared", ] @@ -5892,7 +5992,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5965,11 +6065,61 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.52.0" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" dependencies = [ - "windows-targets 0.52.6", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "windows-link" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" + +[[package]] +name = "windows-result" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +dependencies = [ + "windows-link", ] [[package]] @@ -6122,9 +6272,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" +checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" dependencies = [ "memchr", ] @@ -6141,11 +6291,11 @@ dependencies = [ [[package]] name = "wit-bindgen-rt" -version = "0.33.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", ] [[package]] @@ -6180,7 +6330,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", "synstructure", ] @@ -6190,17 +6340,16 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "byteorder", "zerocopy-derive 0.7.35", ] [[package]] name = "zerocopy" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" dependencies = [ - "zerocopy-derive 0.8.23", + "zerocopy-derive 0.8.24", ] [[package]] @@ -6211,38 +6360,38 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] name = "zerocopy-derive" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", "synstructure", ] @@ -6263,7 +6412,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] @@ -6285,7 +6434,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.100", ] [[package]] diff --git a/examples/swift/src/main.rs b/examples/swift/src/main.rs index 2457564..4badf59 100644 --- a/examples/swift/src/main.rs +++ b/examples/swift/src/main.rs @@ -37,8 +37,14 @@ async fn main() { .await .expect("subscribed blockhashes"); + // subscribe to filler account (used when building Txs) + let _ = drift + .subscribe_account(&filler_subaccount) + .await + .expect("subscribed"); + // choose some markets by symbol - let market_ids: Vec = ["sui-perp", "eth-perp", "xrp-perp"] + let market_ids: Vec = ["sol-perp", "fwog-perp", "render-perp"] .iter() .map(|m| drift.market_lookup(m).unwrap()) .collect(); @@ -76,22 +82,19 @@ async fn try_fill(drift: DriftClient, filler_subaccount: Pubkey, swift_order: Si // TODO: filter `swift_order.order_params()` depending on strategy params println!("new swift order: {swift_order:?}"); let taker_order = swift_order.order_params(); - let taker_subaccount = Wallet::derive_user_account( - &swift_order.taker_authority, - swift_order.taker_subaccount_id(), - ); + let taker_subaccount = swift_order.taker_subaccount(); // fetching taker accounts inline // TODO: for better fills maintain a gRPC map of user accounts - let (taker_account_data, taker_stats) = tokio::try_join!( - drift.get_user_account(&taker_subaccount), - drift.get_user_stats(&swift_order.taker_authority) + let (taker_account_data, taker_stats, tx_builder) = tokio::try_join!( + drift.get_user_account(&taker_subaccount), // always hits RPC + drift.get_user_stats(&swift_order.taker_authority), // always hits RPC + drift.init_tx(&filler_subaccount, false) ) .unwrap(); // built the taker tx // It places the swift order for the taker and fills it - let tx_builder = drift.init_tx(&filler_subaccount, false).await.unwrap(); let tx = tx_builder .place_and_make_swift_order( OrderParams { @@ -103,7 +106,7 @@ async fn try_fill(drift: DriftClient, filler_subaccount: Pubkey, swift_order: Si PositionDirection::Short => PositionDirection::Long, }, // TODO: fill at price depending on strategy params - // always fill at the best price for the taker + // this always attempts to fill at the best price for the _taker_ price: taker_order .auction_start_price .expect("start price set") @@ -129,3 +132,40 @@ async fn try_fill(drift: DriftClient, filler_subaccount: Pubkey, swift_order: Si } } } + +/* + SignedOrderInfo { + uuid: "xu5AywOw", + ts: 1743734832311, + taker_authority: CTh4Q6xooiaJMWCwKP5KLQ4j7X3NEJPf3Uq6rX8UsKSi, + signer: CTh4Q6xooiaJMWCwKP5KLQ4j7X3NEJPf3Uq6rX8UsKSi, + order: Authority( + SignedMsgOrderParamsMessage { + signed_msg_order_params: OrderParams { + order_type: Market, + market_type: Perp, + direction: Short, + user_order_id: 0, + base_asset_amount: 29133284777858, + price: 34566, + market_index: 54, + reduce_only: false, + post_only: None, + immediate_or_cancel: false, + max_ts: Some(1743734834), + trigger_price: None, + trigger_condition: Above, + oracle_price_offset: None, + auction_duration: Some(10), + auction_start_price: Some(34566), + auction_end_price: Some(34566) + }, + sub_account_id: 4, + slot: 331152657, + uuid: [120,117,53,65,121,119,79,119], + take_profit_order_params: None, + stop_loss_order_params: None + }), + signature: 36H12PYh5M4ogHMfjLp4q4EJiGy5TTau1JJravsEDPdX4C8bzkB7cZfzbg9DrztVXZkmFZuZuuox93QybHWBtMoS +} + */