Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3,950 changes: 1,847 additions & 2,103 deletions Cargo.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ resolver = "2"
members = ["clients/cli", "program"]

[workspace.metadata.cli]
solana = "3.1.11"
solana = "4.1.0"

[workspace.metadata.spellcheck]
config = "scripts/spellcheck.toml"
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
RUST_TOOLCHAIN_NIGHTLY = nightly-2026-01-22
SOLANA_CLI_VERSION = 3.1.11
SOLANA_CLI_VERSION = 4.1.0

nightly = +${RUST_TOOLCHAIN_NIGHTLY}

Expand Down
22 changes: 11 additions & 11 deletions clients/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ serde = "1.0.228"
serde_derive = "1.0.228"
serde_json = "1.0.150"
serde_with = "3.21.0"
solana-account = "3.4"
solana-account-decoder = "3.1.3"
solana-account = "4.0"
solana-account-decoder = "4.1.0"
solana-borsh = "3.0"
solana-clap-v3-utils = { version = "3.1.3", features = ["agave-unstable-api"] }
solana-cli-config = "3.1.3"
solana-cli-output = { version = "3.1.3", features = ["agave-unstable-api"] }
solana-client = "3.1.3"
solana-clap-v3-utils = { version = "4.1.0", features = ["agave-unstable-api"] }
solana-cli-config = "4.1.0"
solana-cli-output = { version = "4.1.0", features = ["agave-unstable-api"] }
solana-client = "4.1.0"
solana-clock = "3.0"
solana-commitment-config = "3.1"
solana-epoch-schedule = "3.0"
Expand All @@ -33,15 +33,15 @@ solana-logger = "3.0"
solana-native-token = "3.0"
solana-program-pack = "3.0"
solana-pubkey = "4.2"
solana-remote-wallet = "3.1.3"
solana-rent = "3.0"
solana-remote-wallet = "4.1.0"
solana-rent = "4.0"
solana-sdk-ids = "3.1"
solana-signature = "3.1"
solana-signer = "3.0"
solana-system-interface = "3.0"
solana-sysvar = "3.1"
solana-stake-interface = "2.0.1"
solana-transaction = "3.0"
solana-stake-interface = "4.3.1"
solana-transaction = "4.0"
solana-transaction-status = "3.1.3"
solana-vote-interface = { version = "5.0.0", features = ["bincode"] }
spl-associated-token-account-interface = "2.0.0"
Expand All @@ -52,7 +52,7 @@ spl-single-pool = { version = "6.0.0", path = "../../program", features = [
tokio = "1.52"

[dev-dependencies]
solana-test-validator = "3.1.11"
solana-test-validator = "4.1.0"
serial_test = "3.5.0"
test-case = "3.3"
tempfile = "3.27.0"
Expand Down
5 changes: 3 additions & 2 deletions clients/cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -679,7 +679,7 @@ async fn command_display(config: &Config, command_config: DisplayCli) -> Command
#[allow(deprecated)]
let pools = config
.rpc_client
.get_program_accounts_with_config(
.get_program_ui_accounts_with_config(
&spl_single_pool::id(),
RpcProgramAccountsConfig {
filters: Some(vec![RpcFilterType::Memcmp(Memcmp::new_raw_bytes(
Expand All @@ -694,7 +694,8 @@ async fn command_display(config: &Config, command_config: DisplayCli) -> Command
let mut pool_and_vote_addresses = vec![];
for pool in pools.into_iter() {
let vote_account_address =
try_from_slice_unchecked::<SinglePool>(&pool.1.data)?.vote_account_address;
try_from_slice_unchecked::<SinglePool>(&pool.1.data.decode().unwrap())?
.vote_account_address;
pool_and_vote_addresses.push((pool.0, vote_account_address));
}

Expand Down
14 changes: 8 additions & 6 deletions program/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,18 @@ solana-account-info = "3.1"
solana-borsh = "3.0"
solana-clock = "3.0"
solana-cpi = "3.1"
solana-get-sysvar = "1.0"
solana-instruction = "3.0"
solana-msg = "3.1"
solana-native-token = "3.0"
solana-program-entrypoint = "3.1"
solana-program-error = "3.0"
solana-program-pack = "3.1"
solana-pubkey = { version = "4.2", features = ["borsh", "curve25519"] }
solana-rent = "3.0"
solana-stake-interface = { version = "2.0.1", features = ["bincode", "borsh", "sysvar"] }
solana-rent = { version = "4.0", features = ["sysvar"] }
solana-stake-interface = { version = "4.3.1", features = ["bincode", "borsh", "sysvar"] }
solana-system-interface = { version = "3.0.0", features = ["bincode"] }
solana-sysvar = "3.1"
solana-sysvar = { version = "4.0", features = ["bincode"] }
solana-vote-interface = { version = "5.0.0", features = ["bincode"] }
solana-security-txt = "1.1.3"
spl-token-interface = "3.0.0"
Expand All @@ -42,13 +43,14 @@ thiserror = "2.0"
approx = "0.5.1"
bincode = "1.3.3"
rand = "0.10.1"
solana-account = "3.4"
solana-account = "4.0"
solana-hash = "4.4"
solana-keypair = "3.0"
solana-instruction-error = "2.3"
solana-program-test = { version = "3.1.3", features = ["agave-unstable-api"] }
solana-program-test = { version = "4.1.0", features = ["agave-unstable-api"] }
solana-signer = "3.0"
solana-transaction = "3.0"
solana-sysvar-id = "3.1"
solana-transaction = "4.0"
solana-transaction-error = "3.2"
spl-associated-token-account-interface = "2.0.0"
strum = "0.28.0"
Expand Down
15 changes: 8 additions & 7 deletions program/src/processor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ use {
solana_borsh::v1::try_from_slice_unchecked,
solana_clock::Clock,
solana_cpi::{invoke, invoke_signed},
solana_get_sysvar::GetSysvar,
solana_msg::msg,
solana_native_token::LAMPORTS_PER_SOL,
solana_program_entrypoint::ProgramResult,
Expand All @@ -35,7 +36,7 @@ use {
sysvar::stake_history::StakeHistorySysvar,
},
solana_system_interface::{instruction as system_instruction, program as system_program},
solana_sysvar::{Sysvar, SysvarSerialize},
solana_sysvar::SysvarSerialize,
solana_vote_interface::program as vote_program,
spl_token_interface::{self as spl_token, state::Mint},
};
Expand Down Expand Up @@ -822,7 +823,7 @@ impl Processor {
let (_, pool_stake_state) = get_stake_state(pool_stake_info)?;
let pool_stake_status = pool_stake_state
.delegation
.stake_activating_and_deactivating(
.stake_activating_and_deactivating_v2(
clock.epoch,
stake_history,
PERPETUAL_NEW_WARMUP_COOLDOWN_RATE_EPOCH,
Expand All @@ -835,7 +836,7 @@ impl Processor {
match deserialize_stake(pool_onramp_info) {
Ok(StakeStateV2::Initialized(_)) => (None, u64::MAX),
Ok(StakeStateV2::Stake(_, stake, _)) => (
Some(stake.delegation.stake_activating_and_deactivating(
Some(stake.delegation.stake_activating_and_deactivating_v2(
clock.epoch,
stake_history,
PERPETUAL_NEW_WARMUP_COOLDOWN_RATE_EPOCH,
Expand Down Expand Up @@ -1025,7 +1026,7 @@ impl Processor {
let (_, pool_stake_state) = get_stake_state(pool_stake_info)?;
let pool_stake_status = pool_stake_state
.delegation
.stake_activating_and_deactivating(
.stake_activating_and_deactivating_v2(
clock.epoch,
stake_history,
PERPETUAL_NEW_WARMUP_COOLDOWN_RATE_EPOCH,
Expand Down Expand Up @@ -1066,7 +1067,7 @@ impl Processor {
let (user_stake_meta, user_stake_status) = match deserialize_stake(user_stake_info) {
Ok(StakeStateV2::Stake(meta, stake, _)) => (
meta,
stake.delegation.stake_activating_and_deactivating(
stake.delegation.stake_activating_and_deactivating_v2(
clock.epoch,
stake_history,
PERPETUAL_NEW_WARMUP_COOLDOWN_RATE_EPOCH,
Expand Down Expand Up @@ -1223,7 +1224,7 @@ impl Processor {
let (_, pool_stake_state) = get_stake_state(pool_stake_info)?;
let pool_stake_status = pool_stake_state
.delegation
.stake_activating_and_deactivating(
.stake_activating_and_deactivating_v2(
clock.epoch,
stake_history,
PERPETUAL_NEW_WARMUP_COOLDOWN_RATE_EPOCH,
Expand Down Expand Up @@ -1628,7 +1629,7 @@ impl Processor {
let (_, pool_stake_state) = get_stake_state(pool_stake_info)?;
let pool_stake_status = pool_stake_state
.delegation
.stake_activating_and_deactivating(
.stake_activating_and_deactivating_v2(
clock.epoch,
stake_history,
PERPETUAL_NEW_WARMUP_COOLDOWN_RATE_EPOCH,
Expand Down
18 changes: 12 additions & 6 deletions program/tests/deposit_stake.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ mod helpers;

use {
helpers::*,
solana_account::ReadableAccount,
solana_clock::Clock,
solana_keypair::Keypair,
solana_program_test::*,
Expand All @@ -14,6 +15,7 @@ use {
state::{Authorized, Lockup, StakeActivationStatus, StakeStateV2},
},
solana_system_interface::instruction as system_instruction,
solana_sysvar_id::SysvarId,
solana_transaction::Transaction,
spl_associated_token_account_interface::address::get_associated_token_address,
spl_single_pool::{error::SinglePoolError, id, instruction},
Expand Down Expand Up @@ -522,18 +524,20 @@ async fn all_activation_states(
let deactive = StakeActivationStatus::default();

let clock = context.banks_client.get_sysvar::<Clock>().await.unwrap();
let stake_history = context
let stake_history_account = context
.banks_client
.get_sysvar::<StakeHistory>()
.get_account(StakeHistory::id())
.await
.unwrap()
.unwrap();
let stake_history: StakeHistory = bincode::deserialize(stake_history_account.data()).unwrap();

let pool_triple = get_stake_account(&mut context.banks_client, &accounts.stake_account)
.await
.1
.unwrap()
.delegation
.stake_activating_and_deactivating(clock.epoch, &stake_history, Some(0));
.stake_activating_and_deactivating_v2(clock.epoch, &stake_history, Some(0));

if activate {
assert_eq!(pool_triple, active);
Expand All @@ -545,9 +549,11 @@ async fn all_activation_states(
.await
.1
.map(|stake| {
stake
.delegation
.stake_activating_and_deactivating(clock.epoch, &stake_history, Some(0))
stake.delegation.stake_activating_and_deactivating_v2(
clock.epoch,
&stake_history,
Some(0),
)
});

match user_stake_state {
Expand Down
18 changes: 12 additions & 6 deletions program/tests/replenish.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@ mod helpers;

use {
helpers::*,
solana_account::ReadableAccount,
solana_clock::Clock,
solana_program_test::*,
solana_signer::Signer,
solana_stake_interface::{
instruction as stake_instruction, stake_history::StakeHistory, state::StakeStateV2,
},
solana_sysvar_id::SysvarId,
solana_transaction::Transaction,
spl_single_pool::{error::SinglePoolError, id, instruction},
test_case::test_matrix,
Expand Down Expand Up @@ -314,26 +316,30 @@ async fn move_value_success(
replenish(&mut context, &accounts.vote_account.pubkey()).await;

let clock = context.banks_client.get_sysvar::<Clock>().await.unwrap();
let stake_history = context
let stake_history_account = context
.banks_client
.get_sysvar::<StakeHistory>()
.get_account(StakeHistory::id())
.await
.unwrap()
.unwrap();
let stake_history: StakeHistory = bincode::deserialize(stake_history_account.data()).unwrap();

let (_, pool_stake, pool_lamports) =
get_stake_account(&mut context.banks_client, &accounts.stake_account).await;
let pool_status = pool_stake
.unwrap()
.delegation
.stake_activating_and_deactivating(clock.epoch, &stake_history, Some(0));
.stake_activating_and_deactivating_v2(clock.epoch, &stake_history, Some(0));

let (_, onramp_stake, onramp_lamports) =
get_stake_account(&mut context.banks_client, &accounts.onramp_account).await;
let onramp_status = onramp_stake
.map(|stake| {
stake
.delegation
.stake_activating_and_deactivating(clock.epoch, &stake_history, Some(0))
stake.delegation.stake_activating_and_deactivating_v2(
clock.epoch,
&stake_history,
Some(0),
)
})
.unwrap_or_default();

Expand Down
Loading