From 2eff9a19c374bf421f6f968c8ea4d0dca07fb551 Mon Sep 17 00:00:00 2001 From: Tyera Eulberg Date: Fri, 28 Aug 2020 22:06:30 -0600 Subject: [PATCH] Update to token pack/unpack changes (#11900) --- 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 0fcf01c129..288cf635eb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4649,9 +4649,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 b3271c656d..8e74037e54 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -19,7 +19,7 @@ solana-config-program = { path = "../programs/config", version = "1.4.0" } solana-sdk = { path = "../sdk", version = "1.4.0" } solana-stake-program = { path = "../programs/stake", version = "1.4.0" } solana-vote-program = { path = "../programs/vote", version = "1.4.0" } -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"] } serde = "1.0.112" serde_derive = "1.0.103" serde_json = "1.0.56" 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 135e9c4a6e..958fef3535 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -67,7 +67,7 @@ solana-transaction-status = { path = "../transaction-status", version = "1.4.0" solana-version = { path = "../version", version = "1.4.0" } solana-vote-program = { path = "../programs/vote", version = "1.4.0" } solana-vote-signer = { path = "../vote-signer", version = "1.4.0" } -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 5d23e48500..78f908fa6a 100644 --- a/core/src/rpc.rs +++ b/core/src/rpc.rs @@ -65,7 +65,6 @@ use spl_token_v2_0::{ use std::{ cmp::{max, min}, collections::{HashMap, HashSet}, - mem::size_of, net::SocketAddr, str::FromStr, sync::{ @@ -1080,7 +1079,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) @@ -1128,7 +1127,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 @@ -1187,7 +1186,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 @@ -4727,7 +4726,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]); @@ -4755,7 +4754,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), @@ -4829,7 +4828,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 { @@ -5038,7 +5037,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), @@ -5060,7 +5059,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, @@ -5121,7 +5120,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]); @@ -5149,7 +5148,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), @@ -5180,7 +5179,7 @@ pub mod tests { result["result"]["value"]["data"], json!({ "program": "spl-token", - "space": 176, + "space": TokenAccount::get_packed_len(), "parsed": { "type": "account", "info": { @@ -5222,7 +5221,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 2c6da13e28..662080cddc 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -19,7 +19,7 @@ solana-sdk = { path = "../sdk", version = "1.4.0" } solana-stake-program = { path = "../programs/stake", version = "1.4.0" } solana-vote-program = { path = "../programs/vote", version = "1.4.0" } 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"] } serde = "1.0.112" serde_derive = "1.0.103" serde_json = "1.0.56"