¿Hay alguna forma de comprobar que el usuario A posee el token B de spl dentro del contrato de solana? Tal vez haya un método seguro para verificarlo afuera.
Lo necesito para otorgar algunos privilegios a los usuarios, que poseen los míos nfts. Los usuarios escribirían datos en el programa solo cuando tengan nft.
Para verificar el propietario de una cuenta de token SPL desde un programa, deberá deserializarlo y verificar el campo del owner , es decir:
use solana_program::{ account_info::next_account_info, account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, pubkey::Pubkey, program_pack::Pack, }; use spl_token::state::Account; entrypoint!(process_instruction); const EXPECTED_OWNER: Pubkey = Pubkey::new_from_array([1; 32]); fn process_instruction( program_id: &Pubkey, accounts: &[AccountInfo], instruction_data: &[u8], ) -> ProgramResult { let account_info_iter = &mut accounts.iter(); let spl_token_account_info = next_account_info(account_info_iter)?; let spl_token_account_data = spl_token_account_info.try_borrow_data()?; let spl_token_account = Account::unpack(&spl_token_account_data)?; if spl_token_account.owner == EXPECTED_OWNER { // your logic here } }Tenga en cuenta que no he intentado compilar esto, ¡así que utilícelo con precaución!