Skip to content

Commit 9d88568

Browse files
authored
deps: Upgrade the rest of the repo to sdk v3 (#797)
* deps: Upgrade the rest of the repo to sdk v3 #### Problem The program / client / cli crates are still on SDK v2. #### Summary of changes Mostly straightforward, but upgrade everything to SDK v3! Intra-repo dependencies are restored for the most part, and breaking changes are dealt with as needed. The most noteworthy change is the addition of a `TryFrom<u32>` implementation for `TokenError`, which allows us to print the error appropriately. * rust-legacy: Update to newest crates, use interfaces * cli: Update to newest crates, use interfaces * Update to CLI v3.0.0 * Update lockfile * Take into account auto-demotion in transfer-hook * Use existing num_traits implementation
1 parent 84921d1 commit 9d88568

File tree

28 files changed

+1936
-2454
lines changed

28 files changed

+1936
-2454
lines changed

Cargo.lock

Lines changed: 1635 additions & 2159 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
RUST_TOOLCHAIN_NIGHTLY = nightly-2025-02-16
2-
SOLANA_CLI_VERSION = 2.3.4
2+
SOLANA_CLI_VERSION = 3.0.0
33

44
nightly = +${RUST_TOOLCHAIN_NIGHTLY}
55

clients/cli/Cargo.toml

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,33 +21,35 @@ futures = "0.3"
2121
serde = "1.0.219"
2222
serde_derive = "1.0.103"
2323
serde_json = "1.0.142"
24-
solana-account-decoder = "2.3.4"
25-
solana-clap-v3-utils = "2.3.4"
26-
solana-cli-config = "2.3.4"
27-
solana-cli-output = "2.3.4"
28-
solana-client = "2.3.4"
24+
solana-account-decoder = "3.0.0"
25+
solana-clap-v3-utils = "3.0.0"
26+
solana-cli-config = "3.0.0"
27+
solana-cli-output = "3.0.0"
28+
solana-client = "3.0.0"
29+
solana-commitment-config = "3.0.0"
2930
solana-logger = "3.0.0"
30-
solana-remote-wallet = "2.3.4"
31-
solana-sdk = "2.2.1"
32-
solana-system-interface = "1"
33-
solana-transaction-status = "2.3.4"
34-
spl-associated-token-account-client = { version = "2.0.0" }
35-
spl-pod = { version = "0.5.1" }
36-
spl-token = { version = "8.0", features = ["no-entrypoint"] }
37-
spl-token-2022-interface = { version = "1.0.0" }
31+
solana-remote-wallet = "3.0.0"
32+
solana-sdk = "3.0.0"
33+
solana-system-interface = "2"
34+
solana-transaction-status = "3.0.0"
35+
spl-associated-token-account-interface = { version = "2.0.0" }
36+
spl-pod = { version = "0.7.1" }
37+
spl-token-interface = "2.0.0"
38+
spl-token-2022-interface = { version = "2.0.0", path = "../../interface" }
3839
spl-token-2022 = { version = "9.0.0", path = "../../program", features = ["no-entrypoint"] }
3940
spl-token-client = { version = "0.17.0", path = "../rust-legacy" }
40-
spl-token-confidential-transfer-proof-generation = { version = "0.4.1" }
41-
spl-token-metadata-interface = { version = "0.7.0" }
42-
spl-token-group-interface = { version = "0.6.0" }
43-
spl-memo = { version = "6.0", features = ["no-entrypoint"] }
41+
spl-token-confidential-transfer-proof-generation = { version = "0.5.0", path = "../../confidential/proof-generation" }
42+
spl-token-metadata-interface = { version = "0.8.0" }
43+
spl-token-group-interface = { version = "0.7.0" }
44+
spl-memo-interface = "2.0.0"
4445
strum = "0.27"
4546
strum_macros = "0.27"
4647
tokio = "1.47"
4748

4849
[dev-dependencies]
49-
solana-sdk-ids = "2.2.1"
50-
solana-test-validator = "2.3.4"
50+
solana-nonce = "3.0.0"
51+
solana-sdk-ids = "3.0.0"
52+
solana-test-validator = "3.0.0"
5153
assert_cmd = "2.0.17"
5254
libtest-mimic = "0.8"
5355
serial_test = "3.2.0"

clients/cli/src/bench.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ use {
33
crate::{clap_app::Error, command::CommandResult, config::Config},
44
clap::ArgMatches,
55
solana_clap_v3_utils::input_parsers::{pubkey_of_signer, Amount},
6+
solana_cli_output::display::build_balance_message,
67
solana_client::{
78
nonblocking::rpc_client::RpcClient, rpc_client::RpcClient as BlockingRpcClient,
89
tpu_client::TpuClient, tpu_client::TpuClientConfig,
910
},
1011
solana_remote_wallet::remote_wallet::RemoteWalletManager,
1112
solana_sdk::{
12-
message::Message, native_token::lamports_to_sol, native_token::Sol, program_pack::Pack,
13-
pubkey::Pubkey, signature::Signer,
13+
message::Message, native_token::Sol, program_pack::Pack, pubkey::Pubkey, signature::Signer,
1414
},
1515
solana_system_interface::instruction as system_instruction,
16-
spl_associated_token_account_client::address::get_associated_token_address_with_program_id,
16+
spl_associated_token_account_interface::address::get_associated_token_address_with_program_id,
1717
spl_token_2022_interface::{
1818
extension::StateWithExtensions,
1919
instruction,
@@ -253,7 +253,9 @@ async fn command_deposit_into_or_withdraw_from(
253253
config.check_account(&from_or_to, Some(*token)).await?;
254254
let amount = match ui_amount {
255255
Amount::Raw(ui_amount) => ui_amount,
256-
Amount::Decimal(ui_amount) => spl_token::ui_amount_to_amount(ui_amount, mint_info.decimals),
256+
Amount::Decimal(ui_amount) => {
257+
spl_token_2022::ui_amount_to_amount(ui_amount, mint_info.decimals)
258+
}
257259
Amount::All => {
258260
return Err(
259261
"Use of ALL keyword currently not supported for the bench command"
@@ -372,8 +374,8 @@ async fn check_fee_payer_balance(config: &Config<'_>, required_balance: u64) ->
372374
Err(format!(
373375
"Fee payer, {}, has insufficient balance: {} required, {} available",
374376
config.fee_payer()?.pubkey(),
375-
lamports_to_sol(required_balance),
376-
lamports_to_sol(balance)
377+
build_balance_message(required_balance, false, false),
378+
build_balance_message(balance, false, false)
377379
)
378380
.into())
379381
} else {

clients/cli/src/clap_app.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ impl OfflineArgs for clap::Command<'_> {
111111
}
112112
}
113113

114-
pub static VALID_TOKEN_PROGRAM_IDS: [Pubkey; 2] = [spl_token_2022_interface::ID, spl_token::ID];
114+
pub static VALID_TOKEN_PROGRAM_IDS: [Pubkey; 2] =
115+
[spl_token_2022_interface::ID, spl_token_interface::ID];
115116

116117
#[derive(AsRefStr, Debug, Clone, Copy, PartialEq, EnumString, IntoStaticStr)]
117118
#[strum(serialize_all = "kebab-case")]

clients/cli/src/command.rs

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,19 @@ use {
2121
keypair::signer_from_path,
2222
},
2323
solana_cli_output::{
24-
return_signers_data, CliSignOnlyData, CliSignature, OutputFormat, QuietDisplay,
25-
ReturnSignersConfig, VerboseDisplay,
24+
display::build_balance_message, return_signers_data, CliSignOnlyData, CliSignature,
25+
OutputFormat, QuietDisplay, ReturnSignersConfig, VerboseDisplay,
2626
},
2727
solana_client::rpc_request::TokenAccountsFilter,
2828
solana_remote_wallet::remote_wallet::RemoteWalletManager,
2929
solana_sdk::{
3030
instruction::AccountMeta,
31-
native_token::*,
3231
program_option::COption,
3332
pubkey::Pubkey,
3433
signature::{Keypair, Signer},
3534
},
3635
solana_system_interface::program as system_program,
37-
spl_associated_token_account_client::address::get_associated_token_address_with_program_id,
36+
spl_associated_token_account_interface::address::get_associated_token_address_with_program_id,
3837
spl_pod::optional_keys::OptionalNonZeroPubkey,
3938
spl_token_2022::extension::confidential_transfer::account_info::{
4039
ApplyPendingBalanceAccountInfo, TransferAccountInfo, WithdrawAccountInfo,
@@ -95,7 +94,7 @@ fn print_error_and_exit<T, E: Display>(e: E) -> T {
9594
fn amount_to_raw_amount(amount: Amount, decimals: u8, all_amount: Option<u64>, name: &str) -> u64 {
9695
match amount {
9796
Amount::Raw(ui_amount) => ui_amount,
98-
Amount::Decimal(ui_amount) => spl_token::ui_amount_to_amount(ui_amount, decimals),
97+
Amount::Decimal(ui_amount) => spl_token_2022::ui_amount_to_amount(ui_amount, decimals),
9998
Amount::All => {
10099
if let Some(raw_amount) = all_amount {
101100
raw_amount
@@ -145,8 +144,8 @@ async fn check_wallet_balance(
145144
Err(format!(
146145
"Wallet {}, has insufficient balance: {} required, {} available",
147146
wallet,
148-
lamports_to_sol(required_balance),
149-
lamports_to_sol(balance)
147+
build_balance_message(required_balance, false, false),
148+
build_balance_message(balance, false, false)
150149
)
151150
.into())
152151
} else {
@@ -822,7 +821,7 @@ async fn command_set_transfer_fee(
822821
"Setting transfer fee for {} to {} bps, {} maximum",
823822
token_pubkey,
824823
transfer_fee_basis_points,
825-
spl_token::amount_to_ui_amount(maximum_fee, decimals)
824+
spl_token_2022::amount_to_ui_amount(maximum_fee, decimals)
826825
),
827826
);
828827

@@ -877,7 +876,7 @@ async fn command_create_account(
877876
}
878877

879878
if immutable_owner {
880-
if config.program_id == spl_token::id() {
879+
if config.program_id == spl_token_interface::id() {
881880
return Err(format!(
882881
"Specified --immutable, but token program {} does not support the extension",
883882
config.program_id
@@ -1331,7 +1330,9 @@ async fn command_transfer(
13311330
// the amount the user wants to transfer, as a u64
13321331
let transfer_balance = match ui_amount {
13331332
Amount::Raw(ui_amount) => ui_amount,
1334-
Amount::Decimal(ui_amount) => spl_token::ui_amount_to_amount(ui_amount, mint_info.decimals),
1333+
Amount::Decimal(ui_amount) => {
1334+
spl_token_2022::ui_amount_to_amount(ui_amount, mint_info.decimals)
1335+
}
13351336
Amount::All => {
13361337
if config.sign_only {
13371338
return Err("Use of ALL keyword to burn tokens requires online signing"
@@ -1351,7 +1352,7 @@ async fn command_transfer(
13511352
} else {
13521353
""
13531354
},
1354-
spl_token::amount_to_ui_amount(transfer_balance, mint_info.decimals),
1355+
spl_token_2022::amount_to_ui_amount(transfer_balance, mint_info.decimals),
13551356
sender,
13561357
recipient
13571358
),
@@ -1806,7 +1807,9 @@ async fn command_burn(
18061807

18071808
let amount = match ui_amount {
18081809
Amount::Raw(ui_amount) => ui_amount,
1809-
Amount::Decimal(ui_amount) => spl_token::ui_amount_to_amount(ui_amount, mint_info.decimals),
1810+
Amount::Decimal(ui_amount) => {
1811+
spl_token_2022::ui_amount_to_amount(ui_amount, mint_info.decimals)
1812+
}
18101813
Amount::All => {
18111814
if config.sign_only {
18121815
return Err("Use of ALL keyword to burn tokens requires online signing"
@@ -1821,7 +1824,7 @@ async fn command_burn(
18211824
config,
18221825
format!(
18231826
"Burn {} tokens\n Source: {}",
1824-
spl_token::amount_to_ui_amount(amount, mint_info.decimals),
1827+
spl_token_2022::amount_to_ui_amount(amount, mint_info.decimals),
18251828
account
18261829
),
18271830
);
@@ -1861,7 +1864,7 @@ async fn command_mint(
18611864
config,
18621865
format!(
18631866
"Minting {} tokens\n Token: {}\n Recipient: {}",
1864-
spl_token::amount_to_ui_amount(amount, mint_info.decimals),
1867+
spl_token_2022::amount_to_ui_amount(amount, mint_info.decimals),
18651868
token,
18661869
recipient
18671870
),
@@ -1973,12 +1976,14 @@ async fn command_wrap(
19731976
immutable_owner: bool,
19741977
bulk_signers: BulkSigners,
19751978
) -> CommandResult {
1976-
let lamports = match amount {
1977-
Amount::Raw(amount) => amount,
1978-
Amount::Decimal(amount) => sol_to_lamports(amount),
1979+
let lamports = match amount.sol_to_lamport() {
19791980
Amount::All => {
19801981
return Err("ALL keyword not supported for SOL amount".into());
19811982
}
1983+
Amount::Raw(amount) => amount,
1984+
Amount::Decimal(_) => {
1985+
unreachable!();
1986+
}
19821987
};
19831988
let token = native_token_client_from_config(config)?;
19841989

@@ -1989,7 +1994,7 @@ async fn command_wrap(
19891994
config,
19901995
format!(
19911996
"Wrapping {} SOL into {}",
1992-
lamports_to_sol(lamports),
1997+
build_balance_message(lamports, false, false),
19931998
account
19941999
),
19952000
);
@@ -2005,7 +2010,7 @@ async fn command_wrap(
20052010
}
20062011

20072012
let res = if immutable_owner {
2008-
if config.program_id == spl_token::id() {
2013+
if config.program_id == spl_token_interface::id() {
20092014
return Err(format!(
20102015
"Specified --immutable, but token program {} does not support the extension",
20112016
config.program_id
@@ -2070,7 +2075,10 @@ async fn command_unwrap(
20702075

20712076
println_display(
20722077
config,
2073-
format!(" Amount: {} SOL", lamports_to_sol(account_data.lamports)),
2078+
format!(
2079+
" Amount: {} SOL",
2080+
build_balance_message(account_data.lamports, false, false)
2081+
),
20742082
);
20752083
}
20762084

@@ -2116,7 +2124,7 @@ async fn command_approve(
21162124
config,
21172125
format!(
21182126
"Approve {} tokens\n Account: {}\n Delegate: {}",
2119-
spl_token::amount_to_ui_amount(amount, mint_info.decimals),
2127+
spl_token_2022::amount_to_ui_amount(amount, mint_info.decimals),
21202128
account,
21212129
delegate
21222130
),
@@ -2337,7 +2345,7 @@ async fn command_accounts(
23372345
vec![TokenAccountsFilter::ProgramId(config.program_id)]
23382346
} else {
23392347
vec![
2340-
TokenAccountsFilter::ProgramId(spl_token::id()),
2348+
TokenAccountsFilter::ProgramId(spl_token_interface::id()),
23412349
TokenAccountsFilter::ProgramId(spl_token_2022_interface::id()),
23422350
]
23432351
};
@@ -3366,7 +3374,9 @@ async fn command_deposit_withdraw_confidential_tokens(
33663374
// the amount the user wants to deposit or withdraw, as a u64
33673375
let amount = match ui_amount {
33683376
Amount::Raw(ui_amount) => ui_amount,
3369-
Amount::Decimal(ui_amount) => spl_token::ui_amount_to_amount(ui_amount, mint_info.decimals),
3377+
Amount::Decimal(ui_amount) => {
3378+
spl_token_2022::ui_amount_to_amount(ui_amount, mint_info.decimals)
3379+
}
33703380
Amount::All => {
33713381
if config.sign_only {
33723382
return Err("Use of ALL keyword to burn tokens requires online signing"
@@ -3388,7 +3398,7 @@ async fn command_deposit_withdraw_confidential_tokens(
33883398
config,
33893399
format!(
33903400
"Depositing {} confidential tokens",
3391-
spl_token::amount_to_ui_amount(amount, mint_info.decimals),
3401+
spl_token_2022::amount_to_ui_amount(amount, mint_info.decimals),
33923402
),
33933403
);
33943404
let current_balance = state_with_extension.base.amount;
@@ -3408,7 +3418,7 @@ async fn command_deposit_withdraw_confidential_tokens(
34083418
config,
34093419
format!(
34103420
"Withdrawing {} confidential tokens",
3411-
spl_token::amount_to_ui_amount(amount, mint_info.decimals)
3421+
spl_token_2022::amount_to_ui_amount(amount, mint_info.decimals)
34123422
),
34133423
);
34143424
}

clients/cli/src/config.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@ use {
1010
},
1111
solana_cli_output::OutputFormat,
1212
solana_client::nonblocking::rpc_client::RpcClient,
13+
solana_commitment_config::CommitmentConfig,
1314
solana_remote_wallet::remote_wallet::RemoteWalletManager,
1415
solana_sdk::{
15-
account::Account as RawAccount, commitment_config::CommitmentConfig, hash::Hash,
16-
pubkey::Pubkey, signature::Signer, signer::null_signer::NullSigner,
16+
account::Account as RawAccount, hash::Hash, pubkey::Pubkey, signature::Signer,
17+
signer::null_signer::NullSigner,
1718
},
18-
spl_associated_token_account_client::address::get_associated_token_address_with_program_id,
19+
spl_associated_token_account_interface::address::get_associated_token_address_with_program_id,
1920
spl_token_2022_interface::{
2021
extension::StateWithExtensionsOwned,
2122
state::{Account, Mint},
@@ -280,7 +281,7 @@ impl<'a> Config<'a> {
280281
.and_then(|pubkey| Pubkey::from_str(pubkey).ok())
281282
};
282283

283-
let default_program_id = spl_token::id();
284+
let default_program_id = spl_token_interface::id();
284285
let (program_id, restrict_to_program_id) = if matches.is_present("program_2022") {
285286
(spl_token_2022_interface::id(), true)
286287
} else if let Some(program_id) = pubkey_from_matches("program_id") {

clients/cli/src/sort.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use {
88
solana_account_decoder::{parse_token::TokenAccountType, UiAccountData},
99
solana_client::rpc_response::RpcKeyedAccount,
1010
solana_sdk::pubkey::Pubkey,
11-
spl_associated_token_account_client::address::get_associated_token_address_with_program_id,
11+
spl_associated_token_account_interface::address::get_associated_token_address_with_program_id,
1212
std::{
1313
collections::{btree_map::Entry, BTreeMap},
1414
str::FromStr,

0 commit comments

Comments
 (0)