Estoy tratando de enviar datos a una cuenta de Solana y cobrar por la publicación. Tengo una función de óxido simple:
pub fn place_bet(ctx: Context<PlaceBet>, wager: String, reward: String, game: String) -> ProgramResult { let base_account = &mut ctx.accounts.base_account; let user = &mut ctx.accounts.user; let item = ItemStruct { game: game.to_string(), wager: wager.to_string(), reward: reward.to_string(), user_address: *user.to_account_info().key, }; base_account.read.push(item); base_account.total_bets += 1; Ok(()) }Llamo a esta función en mi App.js usando:
await program.rpc.placeBet(units.toString(), reward(units,line).toString(), id, { accounts: { baseAccount: baseAccount.publicKey, user: provider.wallet.publicKey, }, });Ahora, cuando llamo a esta función en mi aplicación web, aparece la ventana de la billetera fantasma para que el proveedor firme (y pague la pequeña tarifa de gasolina). También me gustaría transferir una cantidad junto con esta función. Mi idea sería usar la función de transferencia spl_token:
pub fn transfer( token_program_id: &Pubkey, source_pubkey: &Pubkey, destination_pubkey: &Pubkey, authority_pubkey: &Pubkey, signer_pubkeys: &[&Pubkey], amount: u64 ) -> Result<Instruction, ProgramError>Todavía soy nuevo en el óxido, así que tengo problemas para resolverlo. En última instancia, me gustaría que la función (en una sola transacción):
units a una dirección de billetera/cuenta que proporcione