Add SPL Token-specific rpc endpoints (#11231)
* Simplify account-decoder program ids + spl_token helper * Spl program namespace version * Add getTokenAccountBalance endpoint * Remove token program id from getTokenAccountBalance request * Add getTokenSupply endpoint * Remove token program id from getTokenSupply request * Add getTokenAccountsByOwner/Delegate endpoints * Remove token program id from getTokenAccountsByOwner/Delegate requests * Named parameter
This commit is contained in:
@ -1,16 +1,18 @@
|
||||
use crate::{parse_nonce::parse_nonce, parse_token::parse_token, parse_vote::parse_vote};
|
||||
use crate::{
|
||||
parse_nonce::parse_nonce,
|
||||
parse_token::{parse_token, spl_token_id_v1_0},
|
||||
parse_vote::parse_vote,
|
||||
};
|
||||
use inflector::Inflector;
|
||||
use serde_json::{json, Value};
|
||||
use solana_sdk::{instruction::InstructionError, pubkey::Pubkey, system_program};
|
||||
use std::{collections::HashMap, str::FromStr};
|
||||
use std::collections::HashMap;
|
||||
use thiserror::Error;
|
||||
|
||||
lazy_static! {
|
||||
static ref SYSTEM_PROGRAM_ID: Pubkey =
|
||||
Pubkey::from_str(&system_program::id().to_string()).unwrap();
|
||||
static ref TOKEN_PROGRAM_ID: Pubkey = Pubkey::from_str(&spl_token::id().to_string()).unwrap();
|
||||
static ref VOTE_PROGRAM_ID: Pubkey =
|
||||
Pubkey::from_str(&solana_vote_program::id().to_string()).unwrap();
|
||||
static ref SYSTEM_PROGRAM_ID: Pubkey = system_program::id();
|
||||
static ref TOKEN_PROGRAM_ID: Pubkey = spl_token_id_v1_0();
|
||||
static ref VOTE_PROGRAM_ID: Pubkey = solana_vote_program::id();
|
||||
pub static ref PARSABLE_PROGRAM_IDS: HashMap<Pubkey, ParsableAccount> = {
|
||||
let mut m = HashMap::new();
|
||||
m.insert(*SYSTEM_PROGRAM_ID, ParsableAccount::Nonce);
|
||||
|
@ -1,10 +1,16 @@
|
||||
use crate::parse_account_data::{ParsableAccount, ParseAccountError};
|
||||
use spl_sdk::pubkey::Pubkey;
|
||||
use spl_token::{
|
||||
use solana_sdk::pubkey::Pubkey;
|
||||
use spl_sdk::pubkey::Pubkey as SplPubkey;
|
||||
use spl_token_v1_0::{
|
||||
option::COption,
|
||||
state::{Account, Mint, Multisig, State},
|
||||
};
|
||||
use std::mem::size_of;
|
||||
use std::{mem::size_of, str::FromStr};
|
||||
|
||||
// A helper function to convert spl_token_v1_0::id() as spl_sdk::pubkey::Pubkey to solana_sdk::pubkey::Pubkey
|
||||
pub fn spl_token_id_v1_0() -> Pubkey {
|
||||
Pubkey::from_str(&spl_token_v1_0::id().to_string()).unwrap()
|
||||
}
|
||||
|
||||
pub fn parse_token(data: &[u8]) -> Result<TokenAccountType, ParseAccountError> {
|
||||
let mut data = data.to_vec();
|
||||
@ -45,7 +51,7 @@ pub fn parse_token(data: &[u8]) -> Result<TokenAccountType, ParseAccountError> {
|
||||
.signers
|
||||
.iter()
|
||||
.filter_map(|pubkey| {
|
||||
if pubkey != &Pubkey::default() {
|
||||
if pubkey != &SplPubkey::default() {
|
||||
Some(pubkey.to_string())
|
||||
} else {
|
||||
None
|
||||
@ -103,8 +109,8 @@ mod test {
|
||||
|
||||
#[test]
|
||||
fn test_parse_token() {
|
||||
let mint_pubkey = Pubkey::new(&[2; 32]);
|
||||
let owner_pubkey = Pubkey::new(&[3; 32]);
|
||||
let mint_pubkey = SplPubkey::new(&[2; 32]);
|
||||
let owner_pubkey = SplPubkey::new(&[3; 32]);
|
||||
let mut account_data = [0; size_of::<Account>()];
|
||||
let mut account: &mut Account = State::unpack_unchecked(&mut account_data).unwrap();
|
||||
account.mint = mint_pubkey;
|
||||
@ -138,12 +144,12 @@ mod test {
|
||||
}),
|
||||
);
|
||||
|
||||
let signer1 = Pubkey::new(&[1; 32]);
|
||||
let signer2 = Pubkey::new(&[2; 32]);
|
||||
let signer3 = Pubkey::new(&[3; 32]);
|
||||
let signer1 = SplPubkey::new(&[1; 32]);
|
||||
let signer2 = SplPubkey::new(&[2; 32]);
|
||||
let signer3 = SplPubkey::new(&[3; 32]);
|
||||
let mut multisig_data = [0; size_of::<Multisig>()];
|
||||
let mut multisig: &mut Multisig = State::unpack_unchecked(&mut multisig_data).unwrap();
|
||||
let mut signers = [Pubkey::default(); 11];
|
||||
let mut signers = [SplPubkey::default(); 11];
|
||||
signers[0] = signer1;
|
||||
signers[1] = signer2;
|
||||
signers[2] = signer3;
|
||||
|
Reference in New Issue
Block a user