Distribute spl tokens (#13559)
* Add helpers to covert between sdk types * Add distribute-spl-tokens to args and arg-parsing * Build spl-token transfer-checked instructions * Check spl-token balances properly * Add display handling to support spl-token * Small refactor to allow failures in allocation iter * Use Associated Token Account for spl-token distributions * Add spl token support to balances command * Update readme * Add spl-token tests * Rename spl-tokens file * Move a couple more things out of commands * Stop requiring lockup_date heading for non-stake distributions * Use epsilon for allocation retention
This commit is contained in:
@ -2,11 +2,14 @@ use crate::parse_instruction::{
|
||||
check_num_accounts, ParsableProgram, ParseInstructionError, ParsedInstructionEnum,
|
||||
};
|
||||
use serde_json::{json, Map, Value};
|
||||
use solana_account_decoder::parse_token::token_amount_to_ui_amount;
|
||||
use solana_sdk::{instruction::CompiledInstruction, pubkey::Pubkey};
|
||||
use solana_account_decoder::parse_token::{pubkey_from_spl_token_v2_0, token_amount_to_ui_amount};
|
||||
use solana_sdk::{
|
||||
instruction::{AccountMeta, CompiledInstruction, Instruction},
|
||||
pubkey::Pubkey,
|
||||
};
|
||||
use spl_token_v2_0::{
|
||||
instruction::{AuthorityType, TokenInstruction},
|
||||
solana_program::program_option::COption,
|
||||
solana_program::{instruction::Instruction as SplTokenInstruction, program_option::COption},
|
||||
};
|
||||
|
||||
pub fn parse_token(
|
||||
@ -410,6 +413,22 @@ fn check_num_token_accounts(accounts: &[u8], num: usize) -> Result<(), ParseInst
|
||||
check_num_accounts(accounts, num, ParsableProgram::SplToken)
|
||||
}
|
||||
|
||||
pub fn spl_token_v2_0_instruction(instruction: SplTokenInstruction) -> Instruction {
|
||||
Instruction {
|
||||
program_id: pubkey_from_spl_token_v2_0(&instruction.program_id),
|
||||
accounts: instruction
|
||||
.accounts
|
||||
.iter()
|
||||
.map(|meta| AccountMeta {
|
||||
pubkey: pubkey_from_spl_token_v2_0(&meta.pubkey),
|
||||
is_signer: meta.is_signer,
|
||||
is_writable: meta.is_writable,
|
||||
})
|
||||
.collect(),
|
||||
data: instruction.data,
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
|
Reference in New Issue
Block a user