#A ProtocolOracle is an oracle that will wrap an external on-chain oracle service and provide token estimates using that service.
All protocol oracles must implement the
consult() function which takes an amount and a token address and returns it's value in WETH.
UniswapV3Oracle uses the pool with highest liquidity and estimates the price based on an average across a time window in order reduce price manipulation via flash loans or front-running.
ChainlinkOracle uses Chainlink to determine the price of a token. For tokens not priced in WETH, it is able to estimate across multiple Chainlink oracles to determine the WETH price.