async function scan(){
const input=document.getElementById("contracts").value.trim()
if(!input){
alert("paste contract list")
return
}
const list=input.split("\n").map(x=>x.trim()).filter(x=>x)
const chainKey=document.getElementById("chain").value
const chain=CHAINS[chainKey]
document.getElementById("status").innerText="scanning..."
const rpc = chainKey === "bsc"
? RPCS[chainKey]
: RPCS[chainKey] + ALCHEMY_KEY
const provider=new ethers.providers.JsonRpcProvider(rpc)
const factory=new ethers.Contract(chain.factory,FACTORY,provider)
const out=document.getElementById("out")
out.innerHTML=""
let i=1
for(const addr of list){
try{
document.getElementById("status").innerText=`scanning ${i}/${list.length}`
const token=new ethers.Contract(addr,ERC20,provider)
const [name,symbol,decimals]=await Promise.all([
token.name(),
token.symbol(),
token.decimals()
])
const pairAddr=await factory.getPair(addr,chain.base)
let tokenLP="-"
let baseLP="-"
let link="-"
if(pairAddr!="0x0000000000000000000000000000000000000000"){
const pair=new ethers.Contract(pairAddr,PAIR,provider)
const [token0,reserves]=await Promise.all([
pair.token0(),
pair.getReserves()
])
if(token0.toLowerCase()==addr.toLowerCase()){
tokenLP=Number(reserves[0])/10**decimals
baseLP=Number(reserves[1])/10**18
}else{
tokenLP=Number(reserves[1])/10**decimals
baseLP=Number(reserves[0])/10**18
}
link=`https://www.dextools.io/app/${chain.name}/pair-explorer/${pairAddr}`
}
const row=document.createElement("tr")
row.innerHTML=`
${i}
${name} (${symbol})
${addr}
${tokenLP}
${baseLP}
${link=="-"?"-":`view`}
`
out.appendChild(row)
}catch(e){
console.log("Lỗi token:", addr, e)
const row=document.createElement("tr")
row.innerHTML=`
${i}
ERROR
${addr}
-
-
-
`
out.appendChild(row)
}
i++
}
document.getElementById("status").innerText="done"
}
Nhận xét
Đăng nhận xét