В смарт-контракте самого токена (ERC-20), в котором вы получаете баланс, информации о цене нет.
Информацию о цене нужно получать на биржах, т.е. там, где эти токены торгуются.
Самый простой способ получения цены - по API биржи, обычно это HTTP или WebSocket.
Например у тех пар, что торгуются на бинанс можно получить вот так
https://binance-docs.github.io/apidocs/spot/en/#sy...
Если же нужно получать цены с децентрализованной биржи или получать цену внутри своих смарт-контрактов - то нужно брать цены из смарт-контрактов самих DEX.
Например для Pancake вот так можно узнать цену
// 0.0001 - кол-во токена1
// 18 - кол-во знаков после запятой
const token1AmountIn = ethers.utils.parseUnits('0.0001', 18)
const amounts = await pancakeRouterV2Contract.getAmountsOut(token1AmountIn, [Token1Address, Token2Address])
// в amounts[1] будет кол-во токенов2, которые можно получить после обмена на кол-во токена 1
const price = amounts[1] / token1AmountIn
Код контракта Pancake Router можно посмотреть тут
https://bscscan.com/address/0x10ed43c718714eb63d5a...