Update spl-token and spl-memo
This commit is contained in:
359
Cargo.lock
generated
359
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -15,7 +15,7 @@ Inflector = "0.11.4"
|
|||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
solana-sdk = { path = "../sdk", version = "1.2.18" }
|
solana-sdk = { path = "../sdk", version = "1.2.18" }
|
||||||
solana-vote-program = { path = "../programs/vote", version = "1.2.18" }
|
solana-vote-program = { path = "../programs/vote", version = "1.2.18" }
|
||||||
spl-token-v1-0 = { package = "spl-token", version = "1.0.3", features = ["skip-no-mangle"] }
|
spl-token-v1-0 = { package = "spl-token", version = "1.0.6", features = ["skip-no-mangle"] }
|
||||||
serde = "1.0.112"
|
serde = "1.0.112"
|
||||||
serde_derive = "1.0.103"
|
serde_derive = "1.0.103"
|
||||||
serde_json = "1.0.54"
|
serde_json = "1.0.54"
|
||||||
|
@ -3,7 +3,7 @@ use solana_sdk::pubkey::Pubkey;
|
|||||||
use spl_token_v1_0::{
|
use spl_token_v1_0::{
|
||||||
option::COption,
|
option::COption,
|
||||||
solana_sdk::pubkey::Pubkey as SplTokenPubkey,
|
solana_sdk::pubkey::Pubkey as SplTokenPubkey,
|
||||||
state::{Account, Mint, Multisig, State},
|
state::{unpack, Account, Mint, Multisig},
|
||||||
};
|
};
|
||||||
use std::{mem::size_of, str::FromStr};
|
use std::{mem::size_of, str::FromStr};
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ pub fn spl_token_id_v1_0() -> Pubkey {
|
|||||||
pub fn parse_token(data: &[u8]) -> Result<TokenAccountType, ParseAccountError> {
|
pub fn parse_token(data: &[u8]) -> Result<TokenAccountType, ParseAccountError> {
|
||||||
let mut data = data.to_vec();
|
let mut data = data.to_vec();
|
||||||
if data.len() == size_of::<Account>() {
|
if data.len() == size_of::<Account>() {
|
||||||
let account: Account = *State::unpack(&mut data)
|
let account: Account = *unpack(&mut data)
|
||||||
.map_err(|_| ParseAccountError::AccountNotParsable(ParsableAccount::SplToken))?;
|
.map_err(|_| ParseAccountError::AccountNotParsable(ParsableAccount::SplToken))?;
|
||||||
Ok(TokenAccountType::Account(UiTokenAccount {
|
Ok(TokenAccountType::Account(UiTokenAccount {
|
||||||
mint: account.mint.to_string(),
|
mint: account.mint.to_string(),
|
||||||
@ -30,7 +30,7 @@ pub fn parse_token(data: &[u8]) -> Result<TokenAccountType, ParseAccountError> {
|
|||||||
delegated_amount: account.delegated_amount,
|
delegated_amount: account.delegated_amount,
|
||||||
}))
|
}))
|
||||||
} else if data.len() == size_of::<Mint>() {
|
} else if data.len() == size_of::<Mint>() {
|
||||||
let mint: Mint = *State::unpack(&mut data)
|
let mint: Mint = *unpack(&mut data)
|
||||||
.map_err(|_| ParseAccountError::AccountNotParsable(ParsableAccount::SplToken))?;
|
.map_err(|_| ParseAccountError::AccountNotParsable(ParsableAccount::SplToken))?;
|
||||||
Ok(TokenAccountType::Mint(UiMint {
|
Ok(TokenAccountType::Mint(UiMint {
|
||||||
owner: match mint.owner {
|
owner: match mint.owner {
|
||||||
@ -41,7 +41,7 @@ pub fn parse_token(data: &[u8]) -> Result<TokenAccountType, ParseAccountError> {
|
|||||||
is_initialized: mint.is_initialized,
|
is_initialized: mint.is_initialized,
|
||||||
}))
|
}))
|
||||||
} else if data.len() == size_of::<Multisig>() {
|
} else if data.len() == size_of::<Multisig>() {
|
||||||
let multisig: Multisig = *State::unpack(&mut data)
|
let multisig: Multisig = *unpack(&mut data)
|
||||||
.map_err(|_| ParseAccountError::AccountNotParsable(ParsableAccount::SplToken))?;
|
.map_err(|_| ParseAccountError::AccountNotParsable(ParsableAccount::SplToken))?;
|
||||||
Ok(TokenAccountType::Multisig(UiMultisig {
|
Ok(TokenAccountType::Multisig(UiMultisig {
|
||||||
num_required_signers: multisig.m,
|
num_required_signers: multisig.m,
|
||||||
@ -106,13 +106,14 @@ pub struct UiMultisig {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
use spl_token_v1_0::state::unpack_unchecked;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_parse_token() {
|
fn test_parse_token() {
|
||||||
let mint_pubkey = SplTokenPubkey::new(&[2; 32]);
|
let mint_pubkey = SplTokenPubkey::new(&[2; 32]);
|
||||||
let owner_pubkey = SplTokenPubkey::new(&[3; 32]);
|
let owner_pubkey = SplTokenPubkey::new(&[3; 32]);
|
||||||
let mut account_data = [0; size_of::<Account>()];
|
let mut account_data = [0; size_of::<Account>()];
|
||||||
let mut account: &mut Account = State::unpack_unchecked(&mut account_data).unwrap();
|
let mut account: &mut Account = unpack_unchecked(&mut account_data).unwrap();
|
||||||
account.mint = mint_pubkey;
|
account.mint = mint_pubkey;
|
||||||
account.owner = owner_pubkey;
|
account.owner = owner_pubkey;
|
||||||
account.amount = 42;
|
account.amount = 42;
|
||||||
@ -131,7 +132,7 @@ mod test {
|
|||||||
);
|
);
|
||||||
|
|
||||||
let mut mint_data = [0; size_of::<Mint>()];
|
let mut mint_data = [0; size_of::<Mint>()];
|
||||||
let mut mint: &mut Mint = State::unpack_unchecked(&mut mint_data).unwrap();
|
let mut mint: &mut Mint = unpack_unchecked(&mut mint_data).unwrap();
|
||||||
mint.owner = COption::Some(owner_pubkey);
|
mint.owner = COption::Some(owner_pubkey);
|
||||||
mint.decimals = 3;
|
mint.decimals = 3;
|
||||||
mint.is_initialized = true;
|
mint.is_initialized = true;
|
||||||
@ -148,7 +149,7 @@ mod test {
|
|||||||
let signer2 = SplTokenPubkey::new(&[2; 32]);
|
let signer2 = SplTokenPubkey::new(&[2; 32]);
|
||||||
let signer3 = SplTokenPubkey::new(&[3; 32]);
|
let signer3 = SplTokenPubkey::new(&[3; 32]);
|
||||||
let mut multisig_data = [0; size_of::<Multisig>()];
|
let mut multisig_data = [0; size_of::<Multisig>()];
|
||||||
let mut multisig: &mut Multisig = State::unpack_unchecked(&mut multisig_data).unwrap();
|
let mut multisig: &mut Multisig = unpack_unchecked(&mut multisig_data).unwrap();
|
||||||
let mut signers = [SplTokenPubkey::default(); 11];
|
let mut signers = [SplTokenPubkey::default(); 11];
|
||||||
signers[0] = signer1;
|
signers[0] = signer1;
|
||||||
signers[1] = signer2;
|
signers[1] = signer2;
|
||||||
|
@ -65,7 +65,7 @@ solana-transaction-status = { path = "../transaction-status", version = "1.2.18"
|
|||||||
solana-version = { path = "../version", version = "1.2.18" }
|
solana-version = { path = "../version", version = "1.2.18" }
|
||||||
solana-vote-program = { path = "../programs/vote", version = "1.2.18" }
|
solana-vote-program = { path = "../programs/vote", version = "1.2.18" }
|
||||||
solana-vote-signer = { path = "../vote-signer", version = "1.2.18" }
|
solana-vote-signer = { path = "../vote-signer", version = "1.2.18" }
|
||||||
spl-token-v1-0 = { package = "spl-token", version = "1.0.3", features = ["skip-no-mangle"] }
|
spl-token-v1-0 = { package = "spl-token", version = "1.0.6", features = ["skip-no-mangle"] }
|
||||||
tempfile = "3.1.0"
|
tempfile = "3.1.0"
|
||||||
thiserror = "1.0"
|
thiserror = "1.0"
|
||||||
tokio = "0.1"
|
tokio = "0.1"
|
||||||
|
@ -51,7 +51,7 @@ use solana_transaction_status::{
|
|||||||
ConfirmedBlock, ConfirmedTransaction, TransactionStatus, UiTransactionEncoding,
|
ConfirmedBlock, ConfirmedTransaction, TransactionStatus, UiTransactionEncoding,
|
||||||
};
|
};
|
||||||
use solana_vote_program::vote_state::{VoteState, MAX_LOCKOUT_HISTORY};
|
use solana_vote_program::vote_state::{VoteState, MAX_LOCKOUT_HISTORY};
|
||||||
use spl_token_v1_0::state::{Account as TokenAccount, State as TokenState};
|
use spl_token_v1_0::state::Account as TokenAccount;
|
||||||
use std::{
|
use std::{
|
||||||
cmp::{max, min},
|
cmp::{max, min},
|
||||||
collections::{HashMap, HashSet},
|
collections::{HashMap, HashSet},
|
||||||
@ -800,7 +800,7 @@ impl JsonRpcRequestProcessor {
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
let mut data = account.data.to_vec();
|
let mut data = account.data.to_vec();
|
||||||
let balance = TokenState::unpack(&mut data)
|
let balance = spl_token_v1_0::state::unpack(&mut data)
|
||||||
.map_err(|_| {
|
.map_err(|_| {
|
||||||
Error::invalid_params("Invalid param: not a v1.0 Token account".to_string())
|
Error::invalid_params("Invalid param: not a v1.0 Token account".to_string())
|
||||||
})
|
})
|
||||||
@ -835,7 +835,7 @@ impl JsonRpcRequestProcessor {
|
|||||||
let supply = get_filtered_program_accounts(&bank, &mint_account.owner, filters)
|
let supply = get_filtered_program_accounts(&bank, &mint_account.owner, filters)
|
||||||
.map(|(_pubkey, account)| {
|
.map(|(_pubkey, account)| {
|
||||||
let mut data = account.data.to_vec();
|
let mut data = account.data.to_vec();
|
||||||
TokenState::unpack(&mut data)
|
spl_token_v1_0::state::unpack(&mut data)
|
||||||
.map(|account: &mut TokenAccount| account.amount)
|
.map(|account: &mut TokenAccount| account.amount)
|
||||||
.unwrap_or(0)
|
.unwrap_or(0)
|
||||||
})
|
})
|
||||||
@ -4181,7 +4181,8 @@ pub mod tests {
|
|||||||
let RpcHandler { io, meta, bank, .. } = start_rpc_handler_with_tx(&Pubkey::new_rand());
|
let RpcHandler { io, meta, bank, .. } = start_rpc_handler_with_tx(&Pubkey::new_rand());
|
||||||
|
|
||||||
let mut account_data = [0; size_of::<TokenAccount>()];
|
let mut account_data = [0; size_of::<TokenAccount>()];
|
||||||
let account: &mut TokenAccount = TokenState::unpack_unchecked(&mut account_data).unwrap();
|
let account: &mut TokenAccount =
|
||||||
|
spl_token_v1_0::state::unpack_unchecked(&mut account_data).unwrap();
|
||||||
let mint = SplTokenPubkey::new(&[2; 32]);
|
let mint = SplTokenPubkey::new(&[2; 32]);
|
||||||
let owner = SplTokenPubkey::new(&[3; 32]);
|
let owner = SplTokenPubkey::new(&[3; 32]);
|
||||||
let delegate = SplTokenPubkey::new(&[4; 32]);
|
let delegate = SplTokenPubkey::new(&[4; 32]);
|
||||||
@ -4225,7 +4226,8 @@ pub mod tests {
|
|||||||
|
|
||||||
// Add the mint, plus another token account to ensure getTokenSupply sums all mint accounts
|
// Add the mint, plus another token account to ensure getTokenSupply sums all mint accounts
|
||||||
let mut mint_data = [0; size_of::<Mint>()];
|
let mut mint_data = [0; size_of::<Mint>()];
|
||||||
let mint_state: &mut Mint = TokenState::unpack_unchecked(&mut mint_data).unwrap();
|
let mint_state: &mut Mint =
|
||||||
|
spl_token_v1_0::state::unpack_unchecked(&mut mint_data).unwrap();
|
||||||
*mint_state = Mint {
|
*mint_state = Mint {
|
||||||
owner: COption::Some(owner),
|
owner: COption::Some(owner),
|
||||||
decimals: 2,
|
decimals: 2,
|
||||||
@ -4263,7 +4265,8 @@ pub mod tests {
|
|||||||
|
|
||||||
// Add another token account with the same owner and delegate but different mint
|
// Add another token account with the same owner and delegate but different mint
|
||||||
let mut account_data = [0; size_of::<TokenAccount>()];
|
let mut account_data = [0; size_of::<TokenAccount>()];
|
||||||
let account: &mut TokenAccount = TokenState::unpack_unchecked(&mut account_data).unwrap();
|
let account: &mut TokenAccount =
|
||||||
|
spl_token_v1_0::state::unpack_unchecked(&mut account_data).unwrap();
|
||||||
let new_mint = SplTokenPubkey::new(&[5; 32]);
|
let new_mint = SplTokenPubkey::new(&[5; 32]);
|
||||||
*account = TokenAccount {
|
*account = TokenAccount {
|
||||||
mint: new_mint,
|
mint: new_mint,
|
||||||
|
@ -15,8 +15,8 @@ Inflector = "0.11.4"
|
|||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
solana-account-decoder = { path = "../account-decoder", version = "1.2.18" }
|
solana-account-decoder = { path = "../account-decoder", version = "1.2.18" }
|
||||||
solana-sdk = { path = "../sdk", version = "1.2.18" }
|
solana-sdk = { path = "../sdk", version = "1.2.18" }
|
||||||
spl-memo-v1-0 = { package = "spl-memo", version = "1.0.4", features = ["skip-no-mangle"] }
|
spl-memo-v1-0 = { package = "spl-memo", version = "1.0.7", features = ["skip-no-mangle"] }
|
||||||
spl-token-v1-0 = { package = "spl-token", version = "1.0.3", features = ["skip-no-mangle"] }
|
spl-token-v1-0 = { package = "spl-token", version = "1.0.6", features = ["skip-no-mangle"] }
|
||||||
serde = "1.0.110"
|
serde = "1.0.110"
|
||||||
serde_derive = "1.0.103"
|
serde_derive = "1.0.103"
|
||||||
serde_json = "1.0.54"
|
serde_json = "1.0.54"
|
||||||
|
Reference in New Issue
Block a user