Ethereum (Mainnet)
For all other pairs of token <> ETH, on-chain oracles from Kyber are used.
In case no price can be fetched from Kyber, we check Uniswap V2, Sushiswap, Uniswap V1, in that order.
In case the above checks fail, there is a custom implementation to used to get prices specifically for LP tokens from Uniswap V2 pools, Balancer, Mooniswap and Curve as well as Yearn vault tokens.
In case still no fiat price could be found, the Coingecko is queried. If that fails as well, the asset won't have a fiat price on the Safe interface.
Ethereum Testnet (Rinkeby)
The ETH <> USD price is fetched from Kraken just like for mainnet.
Uniswap and Kyber on Rinkeby are used in a similar fashion like on mainnet.
Please note that Uniswap and Kyber have no real liquidity on Rinkeby, hence the final fiat value of assets can be very volatile.
xDai
Currently, only the native token (xDai) has a fiat value. The Kraken DAI <> USD oracle is used for this one. If this request fails, we fall back to 1 DAI = 1 USD.
Energy Web Chain and Energy Web Chain Testnet (Volta)
Same like on xDai, only the native tokens (EWT and VT) have a fiat value. On both networks, the EWT <> USD price oracle from Kraken is used as well. If that one fails, KuCoin is used and Coingecko as last resort.