The RateOracle is currently designed in a non-OOP way, where, to add a new source, we have to make changes to the oracle itself. This PR refactors the RateOracle to extract the source-specific logic into separate components, making the code much more maintainable and testable.
In addition, also to increase maintainability and testability, the PR moves away from global access and class methods, and towards instance methods and attributes.
Changes were also made to the sources themselves to re-use already existing code when communicating with the exchanges APIs.