Bump spl-token (#12395)
This commit is contained in:
parent
65a6bfad09
commit
e1a212fb79
|
@ -3695,9 +3695,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-crate-features"
|
name = "solana-crate-features"
|
||||||
version = "1.3.4"
|
version = "1.3.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3e93b888ccc34b2c7a7fa3e1c804ce5f1a4b521d09b8779de3a80e70e3be2f82"
|
checksum = "0cb500621867cd1e9297ca989bd754f4bf52772c7ea8cd2cb3616c1c75e9f62d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"backtrace",
|
"backtrace",
|
||||||
"bytes 0.4.12",
|
"bytes 0.4.12",
|
||||||
|
@ -4043,9 +4043,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-logger"
|
name = "solana-logger"
|
||||||
version = "1.3.4"
|
version = "1.3.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7c8d27af0c30536bf91abbf40db5133e905bfd61ed24b8096c6e0a5cfb92c1e6"
|
checksum = "10fa1615c22d1d63230e7aeaf421321c24ea4746e2e4842cc0694adf5916c1b8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"env_logger",
|
"env_logger",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
|
@ -4303,9 +4303,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-sdk"
|
name = "solana-sdk"
|
||||||
version = "1.3.4"
|
version = "1.3.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "15ca11bc0623ec67bb2dfbf5eff025c67c099f0ac808e192a12210a317417b9b"
|
checksum = "191c1799a2f43eb2f2a97ff8daaeed3bdeb7bee4a3e746bac4618b4eb8b81df9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"assert_matches",
|
"assert_matches",
|
||||||
"bincode",
|
"bincode",
|
||||||
|
@ -4333,10 +4333,10 @@ dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sha2",
|
"sha2",
|
||||||
"solana-crate-features 1.3.4",
|
"solana-crate-features 1.3.12",
|
||||||
"solana-logger 1.3.4",
|
"solana-logger 1.3.12",
|
||||||
"solana-sdk-macro 1.3.4",
|
"solana-sdk-macro 1.3.12",
|
||||||
"solana-sdk-macro-frozen-abi 1.3.4",
|
"solana-sdk-macro-frozen-abi 1.3.12",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -4383,9 +4383,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-sdk-macro"
|
name = "solana-sdk-macro"
|
||||||
version = "1.3.4"
|
version = "1.3.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d5ef3b2acbb22a28edc32e36ed5d3b0c902007befe51f28f46c3e78a825acf71"
|
checksum = "a1c48e7c0d81123734b9074ad03546e89508e2ab12d3aca008184f284b62abc9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bs58",
|
"bs58",
|
||||||
"proc-macro2 1.0.19",
|
"proc-macro2 1.0.19",
|
||||||
|
@ -4407,9 +4407,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-sdk-macro-frozen-abi"
|
name = "solana-sdk-macro-frozen-abi"
|
||||||
version = "1.3.4"
|
version = "1.3.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6cd736a8433b19b8bdf420689219db3403a1f2959f0f8baae57462ddc2fe6911"
|
checksum = "d64fed6f7a226c02c48b539cae879c0eef9f64be08986b248d8ad4cec4328945"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"proc-macro2 1.0.19",
|
"proc-macro2 1.0.19",
|
||||||
|
@ -4776,21 +4776,21 @@ version = "1.0.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b303bab17e0c696de6d7550ba6f05a5a6dbf5c5d1597e68a4592899072e1c07a"
|
checksum = "b303bab17e0c696de6d7550ba6f05a5a6dbf5c5d1597e68a4592899072e1c07a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"solana-sdk 1.3.4",
|
"solana-sdk 1.3.12",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "spl-token"
|
name = "spl-token"
|
||||||
version = "2.0.3"
|
version = "2.0.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "813ab51fcfeabfc60157e6556b96cf005bab55321508053ade8c9f9bcfe5ce0b"
|
checksum = "8c27a47fea402cc7f6d33274310565222ec3213f2df5ba7877e625b17286423b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayref",
|
"arrayref",
|
||||||
"num-derive 0.3.0",
|
"num-derive 0.3.0",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"num_enum",
|
"num_enum",
|
||||||
"remove_dir_all",
|
"remove_dir_all",
|
||||||
"solana-sdk 1.3.4",
|
"solana-sdk 1.3.12",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ solana-config-program = { path = "../programs/config", version = "1.4.0" }
|
||||||
solana-sdk = { path = "../sdk", version = "1.4.0" }
|
solana-sdk = { path = "../sdk", version = "1.4.0" }
|
||||||
solana-stake-program = { path = "../programs/stake", version = "1.4.0" }
|
solana-stake-program = { path = "../programs/stake", version = "1.4.0" }
|
||||||
solana-vote-program = { path = "../programs/vote", version = "1.4.0" }
|
solana-vote-program = { path = "../programs/vote", version = "1.4.0" }
|
||||||
spl-token-v2-0 = { package = "spl-token", version = "2.0.3", features = ["skip-no-mangle"] }
|
spl-token-v2-0 = { package = "spl-token", version = "2.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.56"
|
serde_json = "1.0.56"
|
||||||
|
|
|
@ -4,9 +4,7 @@ use crate::{
|
||||||
};
|
};
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use spl_token_v2_0::{
|
use spl_token_v2_0::{
|
||||||
option::COption,
|
solana_sdk::{program_option::COption, program_pack::Pack, pubkey::Pubkey as SplTokenPubkey},
|
||||||
pack::Pack,
|
|
||||||
solana_sdk::pubkey::Pubkey as SplTokenPubkey,
|
|
||||||
state::{Account, AccountState, Mint, Multisig},
|
state::{Account, AccountState, Mint, Multisig},
|
||||||
};
|
};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
@ -202,16 +200,14 @@ mod test {
|
||||||
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 = vec![0; Account::get_packed_len()];
|
let mut account_data = vec![0; Account::get_packed_len()];
|
||||||
Account::unpack_unchecked_mut(&mut account_data, &mut |account: &mut Account| {
|
let mut account = Account::unpack_unchecked(&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;
|
||||||
account.state = AccountState::Initialized;
|
account.state = AccountState::Initialized;
|
||||||
account.is_native = COption::None;
|
account.is_native = COption::None;
|
||||||
account.close_authority = COption::Some(owner_pubkey);
|
account.close_authority = COption::Some(owner_pubkey);
|
||||||
Ok(())
|
Account::pack(account, &mut account_data).unwrap();
|
||||||
})
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
assert!(parse_token(&account_data, None).is_err());
|
assert!(parse_token(&account_data, None).is_err());
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
@ -234,15 +230,13 @@ mod test {
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut mint_data = vec![0; Mint::get_packed_len()];
|
let mut mint_data = vec![0; Mint::get_packed_len()];
|
||||||
Mint::unpack_unchecked_mut(&mut mint_data, &mut |mint: &mut Mint| {
|
let mut mint = Mint::unpack_unchecked(&mint_data).unwrap();
|
||||||
mint.mint_authority = COption::Some(owner_pubkey);
|
mint.mint_authority = COption::Some(owner_pubkey);
|
||||||
mint.supply = 42;
|
mint.supply = 42;
|
||||||
mint.decimals = 3;
|
mint.decimals = 3;
|
||||||
mint.is_initialized = true;
|
mint.is_initialized = true;
|
||||||
mint.freeze_authority = COption::Some(owner_pubkey);
|
mint.freeze_authority = COption::Some(owner_pubkey);
|
||||||
Ok(())
|
Mint::pack(mint, &mut mint_data).unwrap();
|
||||||
})
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_token(&mint_data, None).unwrap(),
|
parse_token(&mint_data, None).unwrap(),
|
||||||
|
@ -263,14 +257,13 @@ mod test {
|
||||||
signers[0] = signer1;
|
signers[0] = signer1;
|
||||||
signers[1] = signer2;
|
signers[1] = signer2;
|
||||||
signers[2] = signer3;
|
signers[2] = signer3;
|
||||||
Multisig::unpack_unchecked_mut(&mut multisig_data, &mut |multisig: &mut Multisig| {
|
let mut multisig = Multisig::unpack_unchecked(&multisig_data).unwrap();
|
||||||
multisig.m = 2;
|
multisig.m = 2;
|
||||||
multisig.n = 3;
|
multisig.n = 3;
|
||||||
multisig.is_initialized = true;
|
multisig.is_initialized = true;
|
||||||
multisig.signers = signers;
|
multisig.signers = signers;
|
||||||
Ok(())
|
Multisig::pack(multisig, &mut multisig_data).unwrap();
|
||||||
})
|
|
||||||
.unwrap();
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_token(&multisig_data, None).unwrap(),
|
parse_token(&multisig_data, None).unwrap(),
|
||||||
TokenAccountType::Multisig(UiMultisig {
|
TokenAccountType::Multisig(UiMultisig {
|
||||||
|
@ -293,11 +286,9 @@ mod test {
|
||||||
fn test_get_token_account_mint() {
|
fn test_get_token_account_mint() {
|
||||||
let mint_pubkey = SplTokenPubkey::new(&[2; 32]);
|
let mint_pubkey = SplTokenPubkey::new(&[2; 32]);
|
||||||
let mut account_data = vec![0; Account::get_packed_len()];
|
let mut account_data = vec![0; Account::get_packed_len()];
|
||||||
Account::unpack_unchecked_mut(&mut account_data, &mut |account: &mut Account| {
|
let mut account = Account::unpack_unchecked(&account_data).unwrap();
|
||||||
account.mint = mint_pubkey;
|
account.mint = mint_pubkey;
|
||||||
Ok(())
|
Account::pack(account, &mut account_data).unwrap();
|
||||||
})
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let expected_mint_pubkey = Pubkey::new(&[2; 32]);
|
let expected_mint_pubkey = Pubkey::new(&[2; 32]);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
|
|
@ -67,7 +67,7 @@ solana-transaction-status = { path = "../transaction-status", version = "1.4.0"
|
||||||
solana-version = { path = "../version", version = "1.4.0" }
|
solana-version = { path = "../version", version = "1.4.0" }
|
||||||
solana-vote-program = { path = "../programs/vote", version = "1.4.0" }
|
solana-vote-program = { path = "../programs/vote", version = "1.4.0" }
|
||||||
solana-vote-signer = { path = "../vote-signer", version = "1.4.0" }
|
solana-vote-signer = { path = "../vote-signer", version = "1.4.0" }
|
||||||
spl-token-v2-0 = { package = "spl-token", version = "2.0.3", features = ["skip-no-mangle"] }
|
spl-token-v2-0 = { package = "spl-token", version = "2.0.6", features = ["skip-no-mangle"] }
|
||||||
tempfile = "3.1.0"
|
tempfile = "3.1.0"
|
||||||
thiserror = "1.0"
|
thiserror = "1.0"
|
||||||
tokio = { version = "0.2.22", features = ["full"] }
|
tokio = { version = "0.2.22", features = ["full"] }
|
||||||
|
|
164
core/src/rpc.rs
164
core/src/rpc.rs
|
@ -65,7 +65,7 @@ use solana_transaction_status::{
|
||||||
};
|
};
|
||||||
use solana_vote_program::vote_state::{VoteState, MAX_LOCKOUT_HISTORY};
|
use solana_vote_program::vote_state::{VoteState, MAX_LOCKOUT_HISTORY};
|
||||||
use spl_token_v2_0::{
|
use spl_token_v2_0::{
|
||||||
pack::Pack,
|
solana_sdk::program_pack::Pack,
|
||||||
state::{Account as TokenAccount, Mint},
|
state::{Account as TokenAccount, Mint},
|
||||||
};
|
};
|
||||||
use std::{
|
use std::{
|
||||||
|
@ -2569,8 +2569,9 @@ pub mod tests {
|
||||||
vote_state::{Vote, VoteInit, MAX_LOCKOUT_HISTORY},
|
vote_state::{Vote, VoteInit, MAX_LOCKOUT_HISTORY},
|
||||||
};
|
};
|
||||||
use spl_token_v2_0::{
|
use spl_token_v2_0::{
|
||||||
option::COption, solana_sdk::pubkey::Pubkey as SplTokenPubkey,
|
solana_sdk::{program_option::COption, pubkey::Pubkey as SplTokenPubkey},
|
||||||
state::AccountState as TokenAccountState, state::Mint,
|
state::AccountState as TokenAccountState,
|
||||||
|
state::Mint,
|
||||||
};
|
};
|
||||||
use std::{collections::HashMap, time::Duration};
|
use std::{collections::HashMap, time::Duration};
|
||||||
|
|
||||||
|
@ -5002,20 +5003,17 @@ pub mod tests {
|
||||||
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]);
|
||||||
TokenAccount::unpack_unchecked_mut(&mut account_data, &mut |account: &mut TokenAccount| {
|
let token_account = TokenAccount {
|
||||||
*account = TokenAccount {
|
mint,
|
||||||
mint,
|
owner,
|
||||||
owner,
|
delegate: COption::Some(delegate),
|
||||||
delegate: COption::Some(delegate),
|
amount: 420,
|
||||||
amount: 420,
|
state: TokenAccountState::Initialized,
|
||||||
state: TokenAccountState::Initialized,
|
is_native: COption::None,
|
||||||
is_native: COption::None,
|
delegated_amount: 30,
|
||||||
delegated_amount: 30,
|
close_authority: COption::Some(owner),
|
||||||
close_authority: COption::Some(owner),
|
};
|
||||||
};
|
TokenAccount::pack(token_account, &mut account_data).unwrap();
|
||||||
Ok(())
|
|
||||||
})
|
|
||||||
.unwrap();
|
|
||||||
let token_account = Account {
|
let token_account = Account {
|
||||||
lamports: 111,
|
lamports: 111,
|
||||||
data: account_data.to_vec(),
|
data: account_data.to_vec(),
|
||||||
|
@ -5027,17 +5025,14 @@ pub mod tests {
|
||||||
|
|
||||||
// Add the mint
|
// Add the mint
|
||||||
let mut mint_data = vec![0; Mint::get_packed_len()];
|
let mut mint_data = vec![0; Mint::get_packed_len()];
|
||||||
Mint::unpack_unchecked_mut(&mut mint_data, &mut |mint: &mut Mint| {
|
let mint_state = Mint {
|
||||||
*mint = Mint {
|
mint_authority: COption::Some(owner),
|
||||||
mint_authority: COption::Some(owner),
|
supply: 500,
|
||||||
supply: 500,
|
decimals: 2,
|
||||||
decimals: 2,
|
is_initialized: true,
|
||||||
is_initialized: true,
|
freeze_authority: COption::Some(owner),
|
||||||
freeze_authority: COption::Some(owner),
|
};
|
||||||
};
|
Mint::pack(mint_state, &mut mint_data).unwrap();
|
||||||
Ok(())
|
|
||||||
})
|
|
||||||
.unwrap();
|
|
||||||
let mint_account = Account {
|
let mint_account = Account {
|
||||||
lamports: 111,
|
lamports: 111,
|
||||||
data: mint_data.to_vec(),
|
data: mint_data.to_vec(),
|
||||||
|
@ -5102,20 +5097,17 @@ 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 = vec![0; TokenAccount::get_packed_len()];
|
let mut account_data = vec![0; TokenAccount::get_packed_len()];
|
||||||
let new_mint = SplTokenPubkey::new(&[5; 32]);
|
let new_mint = SplTokenPubkey::new(&[5; 32]);
|
||||||
TokenAccount::unpack_unchecked_mut(&mut account_data, &mut |account: &mut TokenAccount| {
|
let token_account = TokenAccount {
|
||||||
*account = TokenAccount {
|
mint: new_mint,
|
||||||
mint: new_mint,
|
owner,
|
||||||
owner,
|
delegate: COption::Some(delegate),
|
||||||
delegate: COption::Some(delegate),
|
amount: 42,
|
||||||
amount: 42,
|
state: TokenAccountState::Initialized,
|
||||||
state: TokenAccountState::Initialized,
|
is_native: COption::None,
|
||||||
is_native: COption::None,
|
delegated_amount: 30,
|
||||||
delegated_amount: 30,
|
close_authority: COption::Some(owner),
|
||||||
close_authority: COption::Some(owner),
|
};
|
||||||
};
|
TokenAccount::pack(token_account, &mut account_data).unwrap();
|
||||||
Ok(())
|
|
||||||
})
|
|
||||||
.unwrap();
|
|
||||||
let token_account = Account {
|
let token_account = Account {
|
||||||
lamports: 111,
|
lamports: 111,
|
||||||
data: account_data.to_vec(),
|
data: account_data.to_vec(),
|
||||||
|
@ -5327,17 +5319,14 @@ pub mod tests {
|
||||||
|
|
||||||
// Add new_mint, and another token account on new_mint with different balance
|
// Add new_mint, and another token account on new_mint with different balance
|
||||||
let mut mint_data = vec![0; Mint::get_packed_len()];
|
let mut mint_data = vec![0; Mint::get_packed_len()];
|
||||||
Mint::unpack_unchecked_mut(&mut mint_data, &mut |mint: &mut Mint| {
|
let mint_state = Mint {
|
||||||
*mint = Mint {
|
mint_authority: COption::Some(owner),
|
||||||
mint_authority: COption::Some(owner),
|
supply: 500,
|
||||||
supply: 500,
|
decimals: 2,
|
||||||
decimals: 2,
|
is_initialized: true,
|
||||||
is_initialized: true,
|
freeze_authority: COption::Some(owner),
|
||||||
freeze_authority: COption::Some(owner),
|
};
|
||||||
};
|
Mint::pack(mint_state, &mut mint_data).unwrap();
|
||||||
Ok(())
|
|
||||||
})
|
|
||||||
.unwrap();
|
|
||||||
let mint_account = Account {
|
let mint_account = Account {
|
||||||
lamports: 111,
|
lamports: 111,
|
||||||
data: mint_data.to_vec(),
|
data: mint_data.to_vec(),
|
||||||
|
@ -5349,20 +5338,17 @@ pub mod tests {
|
||||||
&mint_account,
|
&mint_account,
|
||||||
);
|
);
|
||||||
let mut account_data = vec![0; TokenAccount::get_packed_len()];
|
let mut account_data = vec![0; TokenAccount::get_packed_len()];
|
||||||
TokenAccount::unpack_unchecked_mut(&mut account_data, &mut |account: &mut TokenAccount| {
|
let token_account = TokenAccount {
|
||||||
*account = TokenAccount {
|
mint: new_mint,
|
||||||
mint: new_mint,
|
owner,
|
||||||
owner,
|
delegate: COption::Some(delegate),
|
||||||
delegate: COption::Some(delegate),
|
amount: 10,
|
||||||
amount: 10,
|
state: TokenAccountState::Initialized,
|
||||||
state: TokenAccountState::Initialized,
|
is_native: COption::None,
|
||||||
is_native: COption::None,
|
delegated_amount: 30,
|
||||||
delegated_amount: 30,
|
close_authority: COption::Some(owner),
|
||||||
close_authority: COption::Some(owner),
|
};
|
||||||
};
|
TokenAccount::pack(token_account, &mut account_data).unwrap();
|
||||||
Ok(())
|
|
||||||
})
|
|
||||||
.unwrap();
|
|
||||||
let token_account = Account {
|
let token_account = Account {
|
||||||
lamports: 111,
|
lamports: 111,
|
||||||
data: account_data.to_vec(),
|
data: account_data.to_vec(),
|
||||||
|
@ -5413,20 +5399,17 @@ pub mod tests {
|
||||||
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]);
|
||||||
TokenAccount::unpack_unchecked_mut(&mut account_data, &mut |account: &mut TokenAccount| {
|
let token_account = TokenAccount {
|
||||||
*account = TokenAccount {
|
mint,
|
||||||
mint,
|
owner,
|
||||||
owner,
|
delegate: COption::Some(delegate),
|
||||||
delegate: COption::Some(delegate),
|
amount: 420,
|
||||||
amount: 420,
|
state: TokenAccountState::Initialized,
|
||||||
state: TokenAccountState::Initialized,
|
is_native: COption::Some(10),
|
||||||
is_native: COption::Some(10),
|
delegated_amount: 30,
|
||||||
delegated_amount: 30,
|
close_authority: COption::Some(owner),
|
||||||
close_authority: COption::Some(owner),
|
};
|
||||||
};
|
TokenAccount::pack(token_account, &mut account_data).unwrap();
|
||||||
Ok(())
|
|
||||||
})
|
|
||||||
.unwrap();
|
|
||||||
let token_account = Account {
|
let token_account = Account {
|
||||||
lamports: 111,
|
lamports: 111,
|
||||||
data: account_data.to_vec(),
|
data: account_data.to_vec(),
|
||||||
|
@ -5438,17 +5421,14 @@ pub mod tests {
|
||||||
|
|
||||||
// Add the mint
|
// Add the mint
|
||||||
let mut mint_data = vec![0; Mint::get_packed_len()];
|
let mut mint_data = vec![0; Mint::get_packed_len()];
|
||||||
Mint::unpack_unchecked_mut(&mut mint_data, &mut |mint: &mut Mint| {
|
let mint_state = Mint {
|
||||||
*mint = Mint {
|
mint_authority: COption::Some(owner),
|
||||||
mint_authority: COption::Some(owner),
|
supply: 500,
|
||||||
supply: 500,
|
decimals: 2,
|
||||||
decimals: 2,
|
is_initialized: true,
|
||||||
is_initialized: true,
|
freeze_authority: COption::Some(owner),
|
||||||
freeze_authority: COption::Some(owner),
|
};
|
||||||
};
|
Mint::pack(mint_state, &mut mint_data).unwrap();
|
||||||
Ok(())
|
|
||||||
})
|
|
||||||
.unwrap();
|
|
||||||
let mint_account = Account {
|
let mint_account = Account {
|
||||||
lamports: 111,
|
lamports: 111,
|
||||||
data: mint_data.to_vec(),
|
data: mint_data.to_vec(),
|
||||||
|
|
|
@ -19,7 +19,7 @@ solana-sdk = { path = "../sdk", version = "1.4.0" }
|
||||||
solana-stake-program = { path = "../programs/stake", version = "1.4.0" }
|
solana-stake-program = { path = "../programs/stake", version = "1.4.0" }
|
||||||
solana-vote-program = { path = "../programs/vote", 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-memo-v1-0 = { package = "spl-memo", version = "1.0.7", features = ["skip-no-mangle"] }
|
||||||
spl-token-v2-0 = { package = "spl-token", version = "2.0.3", features = ["skip-no-mangle"] }
|
spl-token-v2-0 = { package = "spl-token", version = "2.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.56"
|
serde_json = "1.0.56"
|
||||||
|
|
|
@ -4,7 +4,7 @@ use solana_account_decoder::parse_token::token_amount_to_ui_amount;
|
||||||
use solana_sdk::{instruction::CompiledInstruction, pubkey::Pubkey};
|
use solana_sdk::{instruction::CompiledInstruction, pubkey::Pubkey};
|
||||||
use spl_token_v2_0::{
|
use spl_token_v2_0::{
|
||||||
instruction::{AuthorityType, TokenInstruction},
|
instruction::{AuthorityType, TokenInstruction},
|
||||||
option::COption,
|
solana_sdk::program_option::COption,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn parse_token(
|
pub fn parse_token(
|
||||||
|
@ -314,7 +314,7 @@ pub fn parse_token(
|
||||||
info: value,
|
info: value,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
TokenInstruction::Transfer2 { amount, decimals } => {
|
TokenInstruction::TransferChecked { amount, decimals } => {
|
||||||
if instruction.accounts.len() < 4 {
|
if instruction.accounts.len() < 4 {
|
||||||
return Err(ParseInstructionError::InstructionKeyMismatch(
|
return Err(ParseInstructionError::InstructionKeyMismatch(
|
||||||
ParsableProgram::SplToken,
|
ParsableProgram::SplToken,
|
||||||
|
@ -336,11 +336,11 @@ pub fn parse_token(
|
||||||
"multisigAuthority",
|
"multisigAuthority",
|
||||||
);
|
);
|
||||||
Ok(ParsedInstructionEnum {
|
Ok(ParsedInstructionEnum {
|
||||||
instruction_type: "transfer2".to_string(),
|
instruction_type: "transferChecked".to_string(),
|
||||||
info: value,
|
info: value,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
TokenInstruction::Approve2 { amount, decimals } => {
|
TokenInstruction::ApproveChecked { amount, decimals } => {
|
||||||
if instruction.accounts.len() < 4 {
|
if instruction.accounts.len() < 4 {
|
||||||
return Err(ParseInstructionError::InstructionKeyMismatch(
|
return Err(ParseInstructionError::InstructionKeyMismatch(
|
||||||
ParsableProgram::SplToken,
|
ParsableProgram::SplToken,
|
||||||
|
@ -362,11 +362,11 @@ pub fn parse_token(
|
||||||
"multisigOwner",
|
"multisigOwner",
|
||||||
);
|
);
|
||||||
Ok(ParsedInstructionEnum {
|
Ok(ParsedInstructionEnum {
|
||||||
instruction_type: "approve2".to_string(),
|
instruction_type: "approveChecked".to_string(),
|
||||||
info: value,
|
info: value,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
TokenInstruction::MintTo2 { amount, decimals } => {
|
TokenInstruction::MintToChecked { amount, decimals } => {
|
||||||
if instruction.accounts.len() < 3 {
|
if instruction.accounts.len() < 3 {
|
||||||
return Err(ParseInstructionError::InstructionKeyMismatch(
|
return Err(ParseInstructionError::InstructionKeyMismatch(
|
||||||
ParsableProgram::SplToken,
|
ParsableProgram::SplToken,
|
||||||
|
@ -387,11 +387,11 @@ pub fn parse_token(
|
||||||
"multisigMintAuthority",
|
"multisigMintAuthority",
|
||||||
);
|
);
|
||||||
Ok(ParsedInstructionEnum {
|
Ok(ParsedInstructionEnum {
|
||||||
instruction_type: "mintTo2".to_string(),
|
instruction_type: "mintToChecked".to_string(),
|
||||||
info: value,
|
info: value,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
TokenInstruction::Burn2 { amount, decimals } => {
|
TokenInstruction::BurnChecked { amount, decimals } => {
|
||||||
if instruction.accounts.len() < 3 {
|
if instruction.accounts.len() < 3 {
|
||||||
return Err(ParseInstructionError::InstructionKeyMismatch(
|
return Err(ParseInstructionError::InstructionKeyMismatch(
|
||||||
ParsableProgram::SplToken,
|
ParsableProgram::SplToken,
|
||||||
|
@ -412,7 +412,7 @@ pub fn parse_token(
|
||||||
"multisigAuthority",
|
"multisigAuthority",
|
||||||
);
|
);
|
||||||
Ok(ParsedInstructionEnum {
|
Ok(ParsedInstructionEnum {
|
||||||
instruction_type: "burn2".to_string(),
|
instruction_type: "burnChecked".to_string(),
|
||||||
info: value,
|
info: value,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -888,8 +888,8 @@ mod test {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// Test Transfer2, incl multisig
|
// Test TransferChecked, incl multisig
|
||||||
let transfer_ix = transfer2(
|
let transfer_ix = transfer_checked(
|
||||||
&spl_token_v2_0::id(),
|
&spl_token_v2_0::id(),
|
||||||
&convert_pubkey(keys[0]),
|
&convert_pubkey(keys[0]),
|
||||||
&convert_pubkey(keys[1]),
|
&convert_pubkey(keys[1]),
|
||||||
|
@ -905,7 +905,7 @@ mod test {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_token(&compiled_instruction, &keys).unwrap(),
|
parse_token(&compiled_instruction, &keys).unwrap(),
|
||||||
ParsedInstructionEnum {
|
ParsedInstructionEnum {
|
||||||
instruction_type: "transfer2".to_string(),
|
instruction_type: "transferChecked".to_string(),
|
||||||
info: json!({
|
info: json!({
|
||||||
"source": keys[1].to_string(),
|
"source": keys[1].to_string(),
|
||||||
"destination": keys[2].to_string(),
|
"destination": keys[2].to_string(),
|
||||||
|
@ -920,7 +920,7 @@ mod test {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
let transfer_ix = transfer2(
|
let transfer_ix = transfer_checked(
|
||||||
&spl_token_v2_0::id(),
|
&spl_token_v2_0::id(),
|
||||||
&convert_pubkey(keys[2]),
|
&convert_pubkey(keys[2]),
|
||||||
&convert_pubkey(keys[3]),
|
&convert_pubkey(keys[3]),
|
||||||
|
@ -936,7 +936,7 @@ mod test {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_token(&compiled_instruction, &keys).unwrap(),
|
parse_token(&compiled_instruction, &keys).unwrap(),
|
||||||
ParsedInstructionEnum {
|
ParsedInstructionEnum {
|
||||||
instruction_type: "transfer2".to_string(),
|
instruction_type: "transferChecked".to_string(),
|
||||||
info: json!({
|
info: json!({
|
||||||
"source": keys[2].to_string(),
|
"source": keys[2].to_string(),
|
||||||
"destination": keys[3].to_string(),
|
"destination": keys[3].to_string(),
|
||||||
|
@ -953,7 +953,7 @@ mod test {
|
||||||
);
|
);
|
||||||
|
|
||||||
// Test Approve2, incl multisig
|
// Test Approve2, incl multisig
|
||||||
let approve_ix = approve2(
|
let approve_ix = approve_checked(
|
||||||
&spl_token_v2_0::id(),
|
&spl_token_v2_0::id(),
|
||||||
&convert_pubkey(keys[1]),
|
&convert_pubkey(keys[1]),
|
||||||
&convert_pubkey(keys[2]),
|
&convert_pubkey(keys[2]),
|
||||||
|
@ -969,7 +969,7 @@ mod test {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_token(&compiled_instruction, &keys).unwrap(),
|
parse_token(&compiled_instruction, &keys).unwrap(),
|
||||||
ParsedInstructionEnum {
|
ParsedInstructionEnum {
|
||||||
instruction_type: "approve2".to_string(),
|
instruction_type: "approveChecked".to_string(),
|
||||||
info: json!({
|
info: json!({
|
||||||
"source": keys[1].to_string(),
|
"source": keys[1].to_string(),
|
||||||
"mint": keys[2].to_string(),
|
"mint": keys[2].to_string(),
|
||||||
|
@ -984,7 +984,7 @@ mod test {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
let approve_ix = approve2(
|
let approve_ix = approve_checked(
|
||||||
&spl_token_v2_0::id(),
|
&spl_token_v2_0::id(),
|
||||||
&convert_pubkey(keys[2]),
|
&convert_pubkey(keys[2]),
|
||||||
&convert_pubkey(keys[3]),
|
&convert_pubkey(keys[3]),
|
||||||
|
@ -1000,7 +1000,7 @@ mod test {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_token(&compiled_instruction, &keys).unwrap(),
|
parse_token(&compiled_instruction, &keys).unwrap(),
|
||||||
ParsedInstructionEnum {
|
ParsedInstructionEnum {
|
||||||
instruction_type: "approve2".to_string(),
|
instruction_type: "approveChecked".to_string(),
|
||||||
info: json!({
|
info: json!({
|
||||||
"source": keys[2].to_string(),
|
"source": keys[2].to_string(),
|
||||||
"mint": keys[3].to_string(),
|
"mint": keys[3].to_string(),
|
||||||
|
@ -1017,7 +1017,7 @@ mod test {
|
||||||
);
|
);
|
||||||
|
|
||||||
// Test MintTo2
|
// Test MintTo2
|
||||||
let mint_to_ix = mint_to2(
|
let mint_to_ix = mint_to_checked(
|
||||||
&spl_token_v2_0::id(),
|
&spl_token_v2_0::id(),
|
||||||
&convert_pubkey(keys[1]),
|
&convert_pubkey(keys[1]),
|
||||||
&convert_pubkey(keys[2]),
|
&convert_pubkey(keys[2]),
|
||||||
|
@ -1032,7 +1032,7 @@ mod test {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_token(&compiled_instruction, &keys).unwrap(),
|
parse_token(&compiled_instruction, &keys).unwrap(),
|
||||||
ParsedInstructionEnum {
|
ParsedInstructionEnum {
|
||||||
instruction_type: "mintTo2".to_string(),
|
instruction_type: "mintToChecked".to_string(),
|
||||||
info: json!({
|
info: json!({
|
||||||
"mint": keys[1].to_string(),
|
"mint": keys[1].to_string(),
|
||||||
"account": keys[2].to_string(),
|
"account": keys[2].to_string(),
|
||||||
|
@ -1047,7 +1047,7 @@ mod test {
|
||||||
);
|
);
|
||||||
|
|
||||||
// Test Burn2
|
// Test Burn2
|
||||||
let burn_ix = burn2(
|
let burn_ix = burn_checked(
|
||||||
&spl_token_v2_0::id(),
|
&spl_token_v2_0::id(),
|
||||||
&convert_pubkey(keys[1]),
|
&convert_pubkey(keys[1]),
|
||||||
&convert_pubkey(keys[2]),
|
&convert_pubkey(keys[2]),
|
||||||
|
@ -1062,7 +1062,7 @@ mod test {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_token(&compiled_instruction, &keys).unwrap(),
|
parse_token(&compiled_instruction, &keys).unwrap(),
|
||||||
ParsedInstructionEnum {
|
ParsedInstructionEnum {
|
||||||
instruction_type: "burn2".to_string(),
|
instruction_type: "burnChecked".to_string(),
|
||||||
info: json!({
|
info: json!({
|
||||||
"account": keys[1].to_string(),
|
"account": keys[1].to_string(),
|
||||||
"mint": keys[2].to_string(),
|
"mint": keys[2].to_string(),
|
||||||
|
@ -1330,8 +1330,8 @@ mod test {
|
||||||
compiled_instruction.accounts[0..compiled_instruction.accounts.len() - 1].to_vec();
|
compiled_instruction.accounts[0..compiled_instruction.accounts.len() - 1].to_vec();
|
||||||
assert!(parse_token(&compiled_instruction, &keys).is_err());
|
assert!(parse_token(&compiled_instruction, &keys).is_err());
|
||||||
|
|
||||||
// Test Transfer2, incl multisig
|
// Test TransferChecked, incl multisig
|
||||||
let transfer_ix = transfer2(
|
let transfer_ix = transfer_checked(
|
||||||
&spl_token_v2_0::id(),
|
&spl_token_v2_0::id(),
|
||||||
&convert_pubkey(keys[1]),
|
&convert_pubkey(keys[1]),
|
||||||
&convert_pubkey(keys[2]),
|
&convert_pubkey(keys[2]),
|
||||||
|
@ -1349,7 +1349,7 @@ mod test {
|
||||||
compiled_instruction.accounts[0..compiled_instruction.accounts.len() - 1].to_vec();
|
compiled_instruction.accounts[0..compiled_instruction.accounts.len() - 1].to_vec();
|
||||||
assert!(parse_token(&compiled_instruction, &keys).is_err());
|
assert!(parse_token(&compiled_instruction, &keys).is_err());
|
||||||
|
|
||||||
let transfer_ix = transfer2(
|
let transfer_ix = transfer_checked(
|
||||||
&spl_token_v2_0::id(),
|
&spl_token_v2_0::id(),
|
||||||
&convert_pubkey(keys[2]),
|
&convert_pubkey(keys[2]),
|
||||||
&convert_pubkey(keys[3]),
|
&convert_pubkey(keys[3]),
|
||||||
|
@ -1367,8 +1367,8 @@ mod test {
|
||||||
compiled_instruction.accounts[0..compiled_instruction.accounts.len() - 3].to_vec();
|
compiled_instruction.accounts[0..compiled_instruction.accounts.len() - 3].to_vec();
|
||||||
assert!(parse_token(&compiled_instruction, &keys).is_err());
|
assert!(parse_token(&compiled_instruction, &keys).is_err());
|
||||||
|
|
||||||
// Test Approve2, incl multisig
|
// Test ApproveChecked, incl multisig
|
||||||
let approve_ix = approve2(
|
let approve_ix = approve_checked(
|
||||||
&spl_token_v2_0::id(),
|
&spl_token_v2_0::id(),
|
||||||
&convert_pubkey(keys[1]),
|
&convert_pubkey(keys[1]),
|
||||||
&convert_pubkey(keys[2]),
|
&convert_pubkey(keys[2]),
|
||||||
|
@ -1386,7 +1386,7 @@ mod test {
|
||||||
compiled_instruction.accounts[0..compiled_instruction.accounts.len() - 1].to_vec();
|
compiled_instruction.accounts[0..compiled_instruction.accounts.len() - 1].to_vec();
|
||||||
assert!(parse_token(&compiled_instruction, &keys).is_err());
|
assert!(parse_token(&compiled_instruction, &keys).is_err());
|
||||||
|
|
||||||
let approve_ix = approve2(
|
let approve_ix = approve_checked(
|
||||||
&spl_token_v2_0::id(),
|
&spl_token_v2_0::id(),
|
||||||
&convert_pubkey(keys[2]),
|
&convert_pubkey(keys[2]),
|
||||||
&convert_pubkey(keys[3]),
|
&convert_pubkey(keys[3]),
|
||||||
|
@ -1404,8 +1404,8 @@ mod test {
|
||||||
compiled_instruction.accounts[0..compiled_instruction.accounts.len() - 3].to_vec();
|
compiled_instruction.accounts[0..compiled_instruction.accounts.len() - 3].to_vec();
|
||||||
assert!(parse_token(&compiled_instruction, &keys).is_err());
|
assert!(parse_token(&compiled_instruction, &keys).is_err());
|
||||||
|
|
||||||
// Test MintTo2
|
// Test MintToChecked
|
||||||
let mint_to_ix = mint_to2(
|
let mint_to_ix = mint_to_checked(
|
||||||
&spl_token_v2_0::id(),
|
&spl_token_v2_0::id(),
|
||||||
&convert_pubkey(keys[1]),
|
&convert_pubkey(keys[1]),
|
||||||
&convert_pubkey(keys[2]),
|
&convert_pubkey(keys[2]),
|
||||||
|
@ -1422,8 +1422,8 @@ mod test {
|
||||||
compiled_instruction.accounts[0..compiled_instruction.accounts.len() - 1].to_vec();
|
compiled_instruction.accounts[0..compiled_instruction.accounts.len() - 1].to_vec();
|
||||||
assert!(parse_token(&compiled_instruction, &keys).is_err());
|
assert!(parse_token(&compiled_instruction, &keys).is_err());
|
||||||
|
|
||||||
// Test Burn2
|
// Test BurnChecked
|
||||||
let burn_ix = burn2(
|
let burn_ix = burn_checked(
|
||||||
&spl_token_v2_0::id(),
|
&spl_token_v2_0::id(),
|
||||||
&convert_pubkey(keys[1]),
|
&convert_pubkey(keys[1]),
|
||||||
&convert_pubkey(keys[2]),
|
&convert_pubkey(keys[2]),
|
||||||
|
|
Loading…
Reference in New Issue