From 184e4253c76be324f2b6aaa526fdcb88265befe4 Mon Sep 17 00:00:00 2001 From: Tyera Eulberg Date: Fri, 28 Aug 2020 22:57:09 -0600 Subject: [PATCH] Update to token pack/unpack changes (#11901) --- Cargo.lock | 4 ++-- account-decoder/Cargo.toml | 2 +- account-decoder/src/parse_token.rs | 18 +++++++++--------- core/Cargo.toml | 2 +- core/src/rpc.rs | 25 ++++++++++++------------- transaction-status/Cargo.toml | 2 +- 6 files changed, 26 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dea5209683..2ebaf3be7d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4612,9 +4612,9 @@ dependencies = [ [[package]] name = "spl-token" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ee48031d5b189a9da7295076ba07bf0ccd407e0fee1279281fb2c3258fa9fb" +checksum = "b7f6163bedb29690345acc9614295c8fdabc1251d4e87a3d72edf48487e937a0" dependencies = [ "arrayref", "num-derive 0.3.0", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index f9a9cc8220..30d4aeeac0 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -22,7 +22,7 @@ solana-config-program = { path = "../programs/config", version = "1.2.27" } solana-sdk = { path = "../sdk", version = "1.2.27" } solana-stake-program = { path = "../programs/stake", version = "1.2.27" } solana-vote-program = { path = "../programs/vote", version = "1.2.27" } -spl-token-v2-0 = { package = "spl-token", version = "2.0.1", features = ["skip-no-mangle"] } +spl-token-v2-0 = { package = "spl-token", version = "2.0.2", features = ["skip-no-mangle"] } thiserror = "1.0" [package.metadata.docs.rs] diff --git a/account-decoder/src/parse_token.rs b/account-decoder/src/parse_token.rs index e3f890470d..62c6b20e76 100644 --- a/account-decoder/src/parse_token.rs +++ b/account-decoder/src/parse_token.rs @@ -9,7 +9,7 @@ use spl_token_v2_0::{ solana_sdk::pubkey::Pubkey as SplTokenPubkey, state::{Account, AccountState, Mint, Multisig}, }; -use std::{mem::size_of, str::FromStr}; +use std::str::FromStr; // A helper function to convert spl_token_v2_0::id() as spl_sdk::pubkey::Pubkey to // solana_sdk::pubkey::Pubkey @@ -27,7 +27,7 @@ pub fn parse_token( data: &[u8], mint_decimals: Option, ) -> Result { - if data.len() == size_of::() { + if data.len() == Account::get_packed_len() { let account = Account::unpack(data) .map_err(|_| ParseAccountError::AccountNotParsable(ParsableAccount::SplToken))?; let decimals = mint_decimals.ok_or_else(|| { @@ -62,7 +62,7 @@ pub fn parse_token( COption::None => None, }, })) - } else if data.len() == size_of::() { + } else if data.len() == Mint::get_packed_len() { let mint = Mint::unpack(data) .map_err(|_| ParseAccountError::AccountNotParsable(ParsableAccount::SplToken))?; Ok(TokenAccountType::Mint(UiMint { @@ -78,7 +78,7 @@ pub fn parse_token( COption::None => None, }, })) - } else if data.len() == size_of::() { + } else if data.len() == Multisig::get_packed_len() { let multisig = Multisig::unpack(data) .map_err(|_| ParseAccountError::AccountNotParsable(ParsableAccount::SplToken))?; Ok(TokenAccountType::Multisig(UiMultisig { @@ -186,7 +186,7 @@ pub struct UiMultisig { } pub fn get_token_account_mint(data: &[u8]) -> Option { - if data.len() == size_of::() { + if data.len() == Account::get_packed_len() { Some(Pubkey::new(&data[0..32])) } else { None @@ -201,7 +201,7 @@ mod test { fn test_parse_token() { let mint_pubkey = SplTokenPubkey::new(&[2; 32]); let owner_pubkey = SplTokenPubkey::new(&[3; 32]); - let mut account_data = [0; size_of::()]; + let mut account_data = vec![0; Account::get_packed_len()]; Account::unpack_unchecked_mut(&mut account_data, &mut |account: &mut Account| { account.mint = mint_pubkey; account.owner = owner_pubkey; @@ -233,7 +233,7 @@ mod test { }), ); - let mut mint_data = [0; size_of::()]; + let mut mint_data = vec![0; Mint::get_packed_len()]; Mint::unpack_unchecked_mut(&mut mint_data, &mut |mint: &mut Mint| { mint.mint_authority = COption::Some(owner_pubkey); mint.supply = 42; @@ -258,7 +258,7 @@ mod test { let signer1 = SplTokenPubkey::new(&[1; 32]); let signer2 = SplTokenPubkey::new(&[2; 32]); let signer3 = SplTokenPubkey::new(&[3; 32]); - let mut multisig_data = [0; size_of::()]; + let mut multisig_data = vec![0; Multisig::get_packed_len()]; let mut signers = [SplTokenPubkey::default(); 11]; signers[0] = signer1; signers[1] = signer2; @@ -292,7 +292,7 @@ mod test { #[test] fn test_get_token_account_mint() { let mint_pubkey = SplTokenPubkey::new(&[2; 32]); - let mut account_data = [0; size_of::()]; + let mut account_data = vec![0; Account::get_packed_len()]; Account::unpack_unchecked_mut(&mut account_data, &mut |account: &mut Account| { account.mint = mint_pubkey; Ok(()) diff --git a/core/Cargo.toml b/core/Cargo.toml index cbae50f242..ca468f0e21 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -67,7 +67,7 @@ solana-version = { path = "../version", version = "1.2.27" } solana-vote-program = { path = "../programs/vote", version = "1.2.27" } solana-vote-signer = { path = "../vote-signer", version = "1.2.27" } solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "1.2.27" } -spl-token-v2-0 = { package = "spl-token", version = "2.0.1", features = ["skip-no-mangle"] } +spl-token-v2-0 = { package = "spl-token", version = "2.0.2", features = ["skip-no-mangle"] } tempfile = "3.1.0" thiserror = "1.0" tokio = { version = "0.2.22", features = ["full"] } diff --git a/core/src/rpc.rs b/core/src/rpc.rs index d9dedd509b..82b8d8b11a 100644 --- a/core/src/rpc.rs +++ b/core/src/rpc.rs @@ -66,7 +66,6 @@ use spl_token_v2_0::{ use std::{ cmp::{max, min}, collections::{HashMap, HashSet}, - mem::size_of, net::SocketAddr, rc::Rc, str::FromStr, @@ -1035,7 +1034,7 @@ impl JsonRpcRequestProcessor { encoding: None, }), // Filter on Token Account state - RpcFilterType::DataSize(size_of::() as u64), + RpcFilterType::DataSize(TokenAccount::get_packed_len() as u64), ]; let mut token_balances: Vec = get_filtered_program_accounts(&bank, &mint_owner, filters) @@ -1083,7 +1082,7 @@ impl JsonRpcRequestProcessor { encoding: None, }), // Filter on Token Account state - RpcFilterType::DataSize(size_of::() as u64), + RpcFilterType::DataSize(TokenAccount::get_packed_len() as u64), ]; if let Some(mint) = mint { // Optional filter on Mint address @@ -1142,7 +1141,7 @@ impl JsonRpcRequestProcessor { encoding: None, }), // Filter on Token Account state - RpcFilterType::DataSize(size_of::() as u64), + RpcFilterType::DataSize(TokenAccount::get_packed_len() as u64), ]; if let Some(mint) = mint { // Optional filter on Mint address @@ -4674,7 +4673,7 @@ pub mod tests { fn test_token_rpcs() { let RpcHandler { io, meta, bank, .. } = start_rpc_handler_with_tx(&Pubkey::new_rand()); - let mut account_data = [0; size_of::()]; + let mut account_data = vec![0; TokenAccount::get_packed_len()]; let mint = SplTokenPubkey::new(&[2; 32]); let owner = SplTokenPubkey::new(&[3; 32]); let delegate = SplTokenPubkey::new(&[4; 32]); @@ -4702,7 +4701,7 @@ pub mod tests { bank.store_account(&token_account_pubkey, &token_account); // Add the mint - let mut mint_data = [0; size_of::()]; + let mut mint_data = vec![0; Mint::get_packed_len()]; Mint::unpack_unchecked_mut(&mut mint_data, &mut |mint: &mut Mint| { *mint = Mint { mint_authority: COption::Some(owner), @@ -4776,7 +4775,7 @@ pub mod tests { bank.store_account(&other_token_account_pubkey, &token_account); // Add another token account with the same owner and delegate but different mint - let mut account_data = [0; size_of::()]; + let mut account_data = vec![0; TokenAccount::get_packed_len()]; let new_mint = SplTokenPubkey::new(&[5; 32]); TokenAccount::unpack_unchecked_mut(&mut account_data, &mut |account: &mut TokenAccount| { *account = TokenAccount { @@ -4985,7 +4984,7 @@ pub mod tests { assert!(accounts.is_empty()); // Add new_mint, and another token account on new_mint with different balance - let mut mint_data = [0; size_of::()]; + let mut mint_data = vec![0; Mint::get_packed_len()]; Mint::unpack_unchecked_mut(&mut mint_data, &mut |mint: &mut Mint| { *mint = Mint { mint_authority: COption::Some(owner), @@ -5007,7 +5006,7 @@ pub mod tests { &Pubkey::from_str(&new_mint.to_string()).unwrap(), &mint_account, ); - let mut account_data = [0; size_of::()]; + let mut account_data = vec![0; TokenAccount::get_packed_len()]; TokenAccount::unpack_unchecked_mut(&mut account_data, &mut |account: &mut TokenAccount| { *account = TokenAccount { mint: new_mint, @@ -5068,7 +5067,7 @@ pub mod tests { fn test_token_parsing() { let RpcHandler { io, meta, bank, .. } = start_rpc_handler_with_tx(&Pubkey::new_rand()); - let mut account_data = [0; size_of::()]; + let mut account_data = vec![0; TokenAccount::get_packed_len()]; let mint = SplTokenPubkey::new(&[2; 32]); let owner = SplTokenPubkey::new(&[3; 32]); let delegate = SplTokenPubkey::new(&[4; 32]); @@ -5096,7 +5095,7 @@ pub mod tests { bank.store_account(&token_account_pubkey, &token_account); // Add the mint - let mut mint_data = [0; size_of::()]; + let mut mint_data = vec![0; Mint::get_packed_len()]; Mint::unpack_unchecked_mut(&mut mint_data, &mut |mint: &mut Mint| { *mint = Mint { mint_authority: COption::Some(owner), @@ -5127,7 +5126,7 @@ pub mod tests { result["result"]["value"]["data"], json!({ "program": "spl-token", - "space": 176, + "space": TokenAccount::get_packed_len(), "parsed": { "type": "account", "info": { @@ -5169,7 +5168,7 @@ pub mod tests { result["result"]["value"]["data"], json!({ "program": "spl-token", - "space": 88, + "space": Mint::get_packed_len(), "parsed": { "type": "mint", "info": { diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index ce30c8affd..6ea0a45115 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -20,7 +20,7 @@ serde_json = "1.0.54" solana-account-decoder = { path = "../account-decoder", version = "1.2.27" } solana-sdk = { path = "../sdk", version = "1.2.27" } spl-memo-v1-0 = { package = "spl-memo", version = "1.0.7", features = ["skip-no-mangle"] } -spl-token-v2-0 = { package = "spl-token", version = "2.0.1", features = ["skip-no-mangle"] } +spl-token-v2-0 = { package = "spl-token", version = "2.0.2", features = ["skip-no-mangle"] } thiserror = "1.0" [package.metadata.docs.rs]