spl-token: New program feature flag (backport #21354) (#21376)

* spl-token: New program feature flag (#21354)

* spl-token: Add feature flag for new release

* Remove all spl token version declarations

(cherry picked from commit 02bc4e3fc1)

# Conflicts:
#	account-decoder/Cargo.toml
#	accounts-cluster-bench/Cargo.toml
#	accounts-cluster-bench/src/main.rs
#	rpc/Cargo.toml
#	rpc/src/rpc.rs
#	runtime/src/accounts_index.rs
#	runtime/src/bank.rs
#	runtime/src/lib.rs
#	sdk/src/feature_set.rs
#	tokens/Cargo.toml
#	tokens/src/spl_token.rs
#	transaction-status/Cargo.toml

* Fix merge issues

Co-authored-by: Jon Cinque <jon.cinque@gmail.com>
This commit is contained in:
mergify[bot]
2021-11-21 16:00:58 +00:00
committed by GitHub
parent f3ea9bc995
commit 42a67d30fc
23 changed files with 229 additions and 245 deletions

View File

@@ -2,7 +2,7 @@ use {
jsonrpc_core::{Error, Result},
solana_account_decoder::{
parse_account_data::AccountAdditionalData,
parse_token::{get_token_account_mint, spl_token_id_v2_0, spl_token_v2_0_native_mint},
parse_token::{get_token_account_mint, spl_token_id, spl_token_native_mint},
UiAccount, UiAccountData, UiAccountEncoding,
},
solana_client::rpc_response::RpcKeyedAccount,
@@ -11,7 +11,7 @@ use {
account::{AccountSharedData, ReadableAccount},
pubkey::Pubkey,
},
spl_token_v2_0::{solana_program::program_pack::Pack, state::Mint},
spl_token::{solana_program::program_pack::Pack, state::Mint},
std::{collections::HashMap, sync::Arc},
};
@@ -74,8 +74,8 @@ where
/// Analyze a mint Pubkey that may be the native_mint and get the mint-account owner (token
/// program_id) and decimals
pub fn get_mint_owner_and_decimals(bank: &Arc<Bank>, mint: &Pubkey) -> Result<(Pubkey, u8)> {
if mint == &spl_token_v2_0_native_mint() {
Ok((spl_token_id_v2_0(), spl_token_v2_0::native_mint::DECIMALS))
if mint == &spl_token_native_mint() {
Ok((spl_token_id(), spl_token::native_mint::DECIMALS))
} else {
let mint_account = bank.get_account(mint).ok_or_else(|| {
Error::invalid_params("Invalid param: could not find mint".to_string())

View File

@@ -13,7 +13,7 @@ use {
jsonrpc_derive::rpc,
serde::{Deserialize, Serialize},
solana_account_decoder::{
parse_token::{spl_token_id_v2_0, token_amount_to_ui_amount, UiTokenAmount},
parse_token::{spl_token_id, token_amount_to_ui_amount, UiTokenAmount},
UiAccount, UiAccountEncoding, UiDataSliceConfig, MAX_BASE58_BYTES,
},
solana_client::{
@@ -46,7 +46,7 @@ use {
bank::Bank,
bank_forks::{BankForks, SnapshotConfig},
commitment::{BlockCommitmentArray, BlockCommitmentCache, CommitmentSlots},
inline_spl_token_v2_0::{SPL_TOKEN_ACCOUNT_MINT_OFFSET, SPL_TOKEN_ACCOUNT_OWNER_OFFSET},
inline_spl_token::{SPL_TOKEN_ACCOUNT_MINT_OFFSET, SPL_TOKEN_ACCOUNT_OWNER_OFFSET},
non_circulating_supply::calculate_non_circulating_supply,
snapshot_utils::get_highest_snapshot_archive_path,
},
@@ -75,7 +75,7 @@ use {
TransactionConfirmationStatus, TransactionStatus, UiConfirmedBlock, UiTransactionEncoding,
},
solana_vote_program::vote_state::{VoteState, MAX_LOCKOUT_HISTORY},
spl_token_v2_0::{
spl_token::{
solana_program::program_pack::Pack,
state::{Account as TokenAccount, Mint},
},
@@ -384,9 +384,7 @@ impl JsonRpcRequestProcessor {
self.get_filtered_program_accounts(&bank, program_id, filters)?
}
};
let result = if program_id == &spl_token_id_v2_0()
&& encoding == UiAccountEncoding::JsonParsed
{
let result = if program_id == &spl_token_id() && encoding == UiAccountEncoding::JsonParsed {
get_parsed_token_accounts(bank.clone(), keyed_accounts.into_iter()).collect()
} else {
keyed_accounts
@@ -1607,14 +1605,13 @@ impl JsonRpcRequestProcessor {
Error::invalid_params("Invalid param: could not find account".to_string())
})?;
if account.owner() != &spl_token_id_v2_0() {
if account.owner() != &spl_token_id() {
return Err(Error::invalid_params(
"Invalid param: not a v2.0 Token account".to_string(),
"Invalid param: not a Token account".to_string(),
));
}
let token_account = TokenAccount::unpack(account.data()).map_err(|_| {
Error::invalid_params("Invalid param: not a v2.0 Token account".to_string())
})?;
let token_account = TokenAccount::unpack(account.data())
.map_err(|_| Error::invalid_params("Invalid param: not a Token account".to_string()))?;
let mint = &Pubkey::from_str(&token_account.mint.to_string())
.expect("Token account mint should be convertible to Pubkey");
let (_, decimals) = get_mint_owner_and_decimals(&bank, mint)?;
@@ -1631,9 +1628,9 @@ impl JsonRpcRequestProcessor {
let mint_account = bank.get_account(mint).ok_or_else(|| {
Error::invalid_params("Invalid param: could not find account".to_string())
})?;
if mint_account.owner() != &spl_token_id_v2_0() {
if mint_account.owner() != &spl_token_id() {
return Err(Error::invalid_params(
"Invalid param: not a v2.0 Token mint".to_string(),
"Invalid param: not a Token mint".to_string(),
));
}
let mint = Mint::unpack(mint_account.data()).map_err(|_| {
@@ -1651,9 +1648,9 @@ impl JsonRpcRequestProcessor {
) -> Result<RpcResponse<Vec<RpcTokenAccountBalance>>> {
let bank = self.bank(commitment);
let (mint_owner, decimals) = get_mint_owner_and_decimals(&bank, mint)?;
if mint_owner != spl_token_id_v2_0() {
if mint_owner != spl_token_id() {
return Err(Error::invalid_params(
"Invalid param: not a v2.0 Token mint".to_string(),
"Invalid param: not a Token mint".to_string(),
));
}
let mut token_balances: Vec<RpcTokenAccountBalance> = self
@@ -1864,7 +1861,7 @@ impl JsonRpcRequestProcessor {
}
Ok(bank
.get_filtered_indexed_accounts(&IndexKey::SplTokenOwner(*owner_key), |account| {
account.owner() == &spl_token_id_v2_0()
account.owner() == &spl_token_id()
&& filters.iter().all(|filter_type| match filter_type {
RpcFilterType::DataSize(size) => account.data().len() as u64 == *size,
RpcFilterType::Memcmp(compare) => compare.bytes_match(account.data()),
@@ -1874,7 +1871,7 @@ impl JsonRpcRequestProcessor {
message: e.to_string(),
})?)
} else {
self.get_filtered_program_accounts(bank, &spl_token_id_v2_0(), filters)
self.get_filtered_program_accounts(bank, &spl_token_id(), filters)
}
}
@@ -1912,7 +1909,7 @@ impl JsonRpcRequestProcessor {
}
Ok(bank
.get_filtered_indexed_accounts(&IndexKey::SplTokenMint(*mint_key), |account| {
account.owner() == &spl_token_id_v2_0()
account.owner() == &spl_token_id()
&& filters.iter().all(|filter_type| match filter_type {
RpcFilterType::DataSize(size) => account.data().len() as u64 == *size,
RpcFilterType::Memcmp(compare) => compare.bytes_match(account.data()),
@@ -1922,7 +1919,7 @@ impl JsonRpcRequestProcessor {
message: e.to_string(),
})?)
} else {
self.get_filtered_program_accounts(bank, &spl_token_id_v2_0(), filters)
self.get_filtered_program_accounts(bank, &spl_token_id(), filters)
}
}
}
@@ -2065,7 +2062,7 @@ fn get_encoded_account(
) -> Result<Option<UiAccount>> {
match bank.get_account(pubkey) {
Some(account) => {
let response = if account.owner() == &spl_token_id_v2_0()
let response = if account.owner() == &spl_token_id()
&& encoding == UiAccountEncoding::JsonParsed
{
get_parsed_token_account(bank.clone(), pubkey, account)
@@ -2105,7 +2102,7 @@ fn encode_account<T: ReadableAccount>(
/// NOTE: `optimize_filters()` should almost always be called before using this method because of
/// the strict match on `MemcmpEncodedBytes::Bytes`.
fn get_spl_token_owner_filter(program_id: &Pubkey, filters: &[RpcFilterType]) -> Option<Pubkey> {
if program_id != &spl_token_id_v2_0() {
if program_id != &spl_token_id() {
return None;
}
let mut data_size_filter: Option<u64> = None;
@@ -2147,7 +2144,7 @@ fn get_spl_token_owner_filter(program_id: &Pubkey, filters: &[RpcFilterType]) ->
/// NOTE: `optimize_filters()` should almost always be called before using this method because of
/// the strict match on `MemcmpEncodedBytes::Bytes`.
fn get_spl_token_mint_filter(program_id: &Pubkey, filters: &[RpcFilterType]) -> Option<Pubkey> {
if program_id != &spl_token_id_v2_0() {
if program_id != &spl_token_id() {
return None;
}
let mut data_size_filter: Option<u64> = None;
@@ -2193,15 +2190,15 @@ fn get_token_program_id_and_mint(
match token_account_filter {
TokenAccountsFilter::Mint(mint) => {
let (mint_owner, _) = get_mint_owner_and_decimals(bank, &mint)?;
if mint_owner != spl_token_id_v2_0() {
if mint_owner != spl_token_id() {
return Err(Error::invalid_params(
"Invalid param: not a v2.0 Token mint".to_string(),
"Invalid param: not a Token mint".to_string(),
));
}
Ok((mint_owner, Some(mint)))
}
TokenAccountsFilter::ProgramId(program_id) => {
if program_id == spl_token_id_v2_0() {
if program_id == spl_token_id() {
Ok((program_id, None))
} else {
Err(Error::invalid_params(
@@ -4103,7 +4100,7 @@ pub mod tests {
vote_instruction,
vote_state::{BlockTimestamp, Vote, VoteInit, VoteStateVersions, MAX_LOCKOUT_HISTORY},
},
spl_token_v2_0::{
spl_token::{
solana_program::{program_option::COption, pubkey::Pubkey as SplTokenPubkey},
state::AccountState as TokenAccountState,
state::Mint,
@@ -6947,7 +6944,7 @@ pub mod tests {
let token_account = AccountSharedData::from(Account {
lamports: 111,
data: account_data.to_vec(),
owner: spl_token_id_v2_0(),
owner: spl_token_id(),
..Account::default()
});
let token_account_pubkey = solana_sdk::pubkey::new_rand();
@@ -6966,7 +6963,7 @@ pub mod tests {
let mint_account = AccountSharedData::from(Account {
lamports: 111,
data: mint_data.to_vec(),
owner: spl_token_id_v2_0(),
owner: spl_token_id(),
..Account::default()
});
bank.store_account(&Pubkey::from_str(&mint.to_string()).unwrap(), &mint_account);
@@ -7043,7 +7040,7 @@ pub mod tests {
let token_account = AccountSharedData::from(Account {
lamports: 111,
data: account_data.to_vec(),
owner: spl_token_id_v2_0(),
owner: spl_token_id(),
..Account::default()
});
let token_with_different_mint_pubkey = solana_sdk::pubkey::new_rand();
@@ -7058,7 +7055,7 @@ pub mod tests {
"params":["{}", {{"programId": "{}"}}]
}}"#,
owner,
spl_token_id_v2_0(),
spl_token_id(),
);
let res = io.handle_request_sync(&req, meta.clone());
let result: Value = serde_json::from_str(&res.expect("actual response"))
@@ -7076,7 +7073,7 @@ pub mod tests {
"params":["{}", {{"programId": "{}"}}, {{"encoding": "jsonParsed"}}]
}}"#,
owner,
spl_token_id_v2_0(),
spl_token_id(),
);
let res = io.handle_request_sync(&req, meta.clone());
let result: Value = serde_json::from_str(&res.expect("actual response"))
@@ -7093,7 +7090,7 @@ pub mod tests {
"method":"getProgramAccounts",
"params":["{}", {{"encoding": "jsonParsed"}}]
}}"#,
spl_token_id_v2_0(),
spl_token_id(),
);
let res = io.handle_request_sync(&req, meta.clone());
let result: Value = serde_json::from_str(&res.expect("actual response"))
@@ -7157,7 +7154,7 @@ pub mod tests {
"params":["{}", {{"programId": "{}"}}]
}}"#,
solana_sdk::pubkey::new_rand(),
spl_token_id_v2_0(),
spl_token_id(),
);
let res = io.handle_request_sync(&req, meta.clone());
let result: Value = serde_json::from_str(&res.expect("actual response"))
@@ -7175,7 +7172,7 @@ pub mod tests {
"params":["{}", {{"programId": "{}"}}]
}}"#,
delegate,
spl_token_id_v2_0(),
spl_token_id(),
);
let res = io.handle_request_sync(&req, meta.clone());
let result: Value = serde_json::from_str(&res.expect("actual response"))
@@ -7240,7 +7237,7 @@ pub mod tests {
"params":["{}", {{"programId": "{}"}}]
}}"#,
solana_sdk::pubkey::new_rand(),
spl_token_id_v2_0(),
spl_token_id(),
);
let res = io.handle_request_sync(&req, meta.clone());
let result: Value = serde_json::from_str(&res.expect("actual response"))
@@ -7262,7 +7259,7 @@ pub mod tests {
let mint_account = AccountSharedData::from(Account {
lamports: 111,
data: mint_data.to_vec(),
owner: spl_token_id_v2_0(),
owner: spl_token_id(),
..Account::default()
});
bank.store_account(
@@ -7284,7 +7281,7 @@ pub mod tests {
let token_account = AccountSharedData::from(Account {
lamports: 111,
data: account_data.to_vec(),
owner: spl_token_id_v2_0(),
owner: spl_token_id(),
..Account::default()
});
let token_with_smaller_balance = solana_sdk::pubkey::new_rand();
@@ -7348,7 +7345,7 @@ pub mod tests {
let token_account = AccountSharedData::from(Account {
lamports: 111,
data: account_data.to_vec(),
owner: spl_token_id_v2_0(),
owner: spl_token_id(),
..Account::default()
});
let token_account_pubkey = solana_sdk::pubkey::new_rand();
@@ -7367,7 +7364,7 @@ pub mod tests {
let mint_account = AccountSharedData::from(Account {
lamports: 111,
data: mint_data.to_vec(),
owner: spl_token_id_v2_0(),
owner: spl_token_id(),
..Account::default()
});
bank.store_account(&Pubkey::from_str(&mint.to_string()).unwrap(), &mint_account);

View File

@@ -14,7 +14,7 @@ use {
crossbeam_channel::{Receiver, RecvTimeoutError, SendError, Sender},
rayon::prelude::*,
serde::Serialize,
solana_account_decoder::{parse_token::spl_token_id_v2_0, UiAccount, UiAccountEncoding},
solana_account_decoder::{parse_token::spl_token_id, UiAccount, UiAccountEncoding},
solana_client::{
rpc_filter::RpcFilterType,
rpc_response::{
@@ -307,9 +307,7 @@ fn filter_account_result(
// If last_modified_slot < last_notified_slot this means that we last notified for a fork
// and should notify that the account state has been reverted.
let results: Box<dyn Iterator<Item = UiAccount>> = if last_modified_slot != last_notified_slot {
if account.owner() == &spl_token_id_v2_0()
&& params.encoding == UiAccountEncoding::JsonParsed
{
if account.owner() == &spl_token_id() && params.encoding == UiAccountEncoding::JsonParsed {
Box::new(iter::once(get_parsed_token_account(
bank,
&params.pubkey,
@@ -360,8 +358,7 @@ fn filter_program_results(
RpcFilterType::Memcmp(compare) => compare.bytes_match(account.data()),
})
});
let accounts: Box<dyn Iterator<Item = RpcKeyedAccount>> = if params.pubkey
== spl_token_id_v2_0()
let accounts: Box<dyn Iterator<Item = RpcKeyedAccount>> = if params.pubkey == spl_token_id()
&& params.encoding == UiAccountEncoding::JsonParsed
&& !accounts_is_empty
{