feature: add new token program feature (#18780)

* feature: add new token program feature

* Fixup test

* Update to spl-token v3.2.0

* Update Cargo.lock + fmt

* Update token program version in fetch-spl.sh

* Bump associated token program to 1.0.3

* Add aToken so
This commit is contained in:
Jon Cinque
2021-07-21 14:34:25 +02:00
committed by GitHub
parent bbd22f06f4
commit 51f3b9aa7c
17 changed files with 128 additions and 179 deletions

View File

@ -22,9 +22,9 @@ solana-account-decoder = { path = "../account-decoder", version = "=1.8.0" }
solana-sdk = { path = "../sdk", version = "=1.8.0" }
solana-runtime = { path = "../runtime", version = "=1.8.0" }
solana-vote-program = { path = "../programs/vote", version = "=1.8.0" }
spl-associated-token-account-v1-0 = { package = "spl-associated-token-account", version = "=1.0.2", features = ["no-entrypoint"] }
spl-associated-token-account-v1-0 = { package = "spl-associated-token-account", version = "=1.0.3", features = ["no-entrypoint"] }
spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] }
spl-token-v2-0 = { package = "spl-token", version = "=3.1.1", features = ["no-entrypoint"] }
spl-token-v2-0 = { package = "spl-token", version = "=3.2.0", features = ["no-entrypoint"] }
thiserror = "1.0"
[package.metadata.docs.rs]

View File

@ -372,6 +372,15 @@ pub fn parse_token(
info: value,
})
}
TokenInstruction::SyncNative => {
check_num_token_accounts(&instruction.accounts, 1)?;
Ok(ParsedInstructionEnum {
instruction_type: "syncNative".to_string(),
info: json!({
"account": account_keys[instruction.accounts[0] as usize].to_string(),
}),
})
}
}
}
@ -930,7 +939,7 @@ mod test {
}
);
// Test Approve2, incl multisig
// Test ApproveChecked, incl multisig
let approve_ix = approve_checked(
&spl_token_v2_0::id(),
&convert_pubkey(keys[1]),
@ -996,7 +1005,7 @@ mod test {
}
);
// Test MintTo2
// Test MintToChecked
let mint_to_ix = mint_to_checked(
&spl_token_v2_0::id(),
&convert_pubkey(keys[1]),
@ -1027,7 +1036,7 @@ mod test {
}
);
// Test Burn2
// Test BurnChecked
let burn_ix = burn_checked(
&spl_token_v2_0::id(),
&convert_pubkey(keys[1]),
@ -1057,6 +1066,20 @@ mod test {
})
}
);
// Test SyncNative
let sync_native_ix = sync_native(&spl_token_v2_0::id(), &convert_pubkey(keys[0])).unwrap();
let message = Message::new(&[sync_native_ix], None);
let compiled_instruction = convert_compiled_instruction(&message.instructions[0]);
assert_eq!(
parse_token(&compiled_instruction, &keys).unwrap(),
ParsedInstructionEnum {
instruction_type: "syncNative".to_string(),
info: json!({
"account": keys[0].to_string(),
})
}
);
}
#[test]
@ -1421,5 +1444,14 @@ mod test {
compiled_instruction.accounts =
compiled_instruction.accounts[0..compiled_instruction.accounts.len() - 1].to_vec();
assert!(parse_token(&compiled_instruction, &keys).is_err());
// Test SyncNative
let sync_native_ix = sync_native(&spl_token_v2_0::id(), &convert_pubkey(keys[0])).unwrap();
let message = Message::new(&[sync_native_ix], None);
let mut compiled_instruction = convert_compiled_instruction(&message.instructions[0]);
assert!(parse_token(&compiled_instruction, &[]).is_err());
compiled_instruction.accounts =
compiled_instruction.accounts[0..compiled_instruction.accounts.len() - 1].to_vec();
assert!(parse_token(&compiled_instruction, &keys).is_err());
}
}