-
Notifications
You must be signed in to change notification settings - Fork 1k
Description
Right now we can't run dynamic data sources for reading symbol()
and decimal()
and name()
for all the tokens on Uniswap.
This is because Uniswap does not do any checking to see what contracts are stored in its Factory contract as a "Uniswap Exchange." This has led to the fact that the Graph Node will crash when trying to read symbol
and decimal
.
The feature I am requesting is this: have functionality in the mappings to call into a contract and see if a function exists. It might look something like this:
import {functionExists} from '@graphprotocol/graph-ts'
import ......
export function handleNewExchange(event: NewExchange): void {
let id = event.params.exchange.toHex()
let exchange = new Exchange(id)
let erc20contract = ERC20.bind(event.params.token)
if (erc20contract.functionExists("symbol")) {
exchange.decimal = erc20contract.symbol()
} else {
exchange.decimal = null
}
}
This is causing a blocker on Uniswap as I can't index all the exchanges for their symbol and decimal and these are important for the data, otherwise it gets confusing what you are looking at. I could hard code them all, but thats over 250 exchanges, and it isn't a long term solution.