code: def approve(self, owner_acct: Account, b58_spender_address: str, amount: int, payer_acct: Account, gas_limit: int,
                  gas_price: int):
          
          func = InvokeFunction('approve')
          if not isinstance(amount, int):
              raise SDKException(ErrorCode.param_err('the data type of amount should be int.'))
          if amount < 0:
              raise SDKException(ErrorCode.param_err('the amount should be equal or great than 0.'))
          owner_address = owner_acct.get_address().to_bytes()
          Oep4.__b58_address_check(b58_spender_address)
          spender_address = Address.b58decode(b58_spender_address).to_bytes()
          func.set_params_value(owner_address, spender_address, amount)
          tx_hash = self.__sdk.get_network().send_neo_vm_transaction(self.__hex_contract_address, owner_acct, payer_acct,
                                                                     gas_limit, gas_price, func)
          return tx_hash
docs: This interface is used to call the Approve method in ope4
          that allows spender to withdraw a certain amount of oep4 token from owner account multiple times.
  
          If this function is called again, it will overwrite the current allowance with new value.
  
          :param owner_acct: an Account class that indicate the owner.
          :param b58_spender_address: a base58 encode address that be allowed to spend the oep4 token in owner's account.
          :param amount: an int value that indicate the amount oep4 token that will be transferred in this transaction.
          :param payer_acct: an Account class that used to pay for the transaction.
          :param gas_limit: an int value that indicate the gas limit.
          :param gas_price: an int value that indicate the gas price.
          :return: the hexadecimal transaction hash value.