i am a bit confuse on how how to use approve function from front end.
this is my contract function
pub fn pay_merchant(env: &Env, merchant: Address, amount: i128, user: Address) -> Result<(), Error> {
if paused(&env) {
return Err(Error::Paused);
}
if amount <= 0 {
return Err( Error::InvalidAmount);
}
// if merchant == Address::from_str(&env, "0") {
// panic_with_error!(&env, Error::InvalidAddress);
// }
let token_address = env.storage().instance().get(&DataKey::Sep41)
.ok_or(Error::NotFound)?;
let token = token::Client::new(&env, &token_address);
let contract_address = env.current_contract_address();
// Calculate fees
let (fee_num, fee_den) = Self::get_fees_parameter(&env);
let fee = (amount * fee_num as i128) / (100 * fee_den as i128);
let merchant_amount = amount - fee;
token.transfer_from(&contract_address,&user, &contract_address, &amount);
token.transfer(&contract_address, &merchant, &merchant_amount);
// Update admin fees
let mut admin_deposit: i128 = env.storage().instance()
.get(&DataKey::AdminTotalDeposit)
.unwrap_or(0);
admin_deposit += fee;
env.storage().instance().set(&DataKey::AdminTotalDeposit, &admin_deposit);
// Emit event
env.events().publish(
(symbol_short!("payment"), user),
(merchant, amount, merchant_amount)
);
Ok(())
}