GnuCash can deal with multiple currencies. However, its behavior when setting currency exchange rates is somewhat obscure and had me spend literally hours to figure out how to get it under control a couple of times.
The use case. Account A is in USD currency, account B is in UAH currency. You need to transfer funds from A to B, which involves currency exchange rate.
When you do this the very first time, you enter Description of the transaction, specify the account B to transfer funds to, and key in Debit/Withdraw value of say 150USD and then hit Enter key, GnuCash then will present you with an exchange rate editor window where you should be able to enter the exchange rate for this transaction.
As it often happens, many transactions are repetitive, and luckily GnuCash helps making these records fast by offering you a history autocompletion function, much like one found in LibreOffice and Bash/Linux/UNIX terminal.
So, typically a user would quickly create another new record in a ledger for account A, specify a different amount of Debit/Withdrawal this time and find out that the resulting value in account B is wrong.