如何加快多个合约的代币平衡

How to speed up token balance on multiple contracts

我正在使用以太币在所有合约上调用 balanceOf 方法来检查用户那里是否有任何余额,如果没有,令牌将不会显示在他的仪表板中,但这需要很多时间,有没有实现相同目标的更巧妙方法?

我的代码:

        for (let key in tokens) {
        if (tokens.hasOwnProperty(key)) {
            let contract_address_to_check = tokens[key].address;
            if (contract_address_to_check != "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") {
                const Contract = new ethers.Contract(contract_address_to_check, Abi, provider);
                let balance_wei = await Contract.balanceOf(address);
                
                if (balance_wei > 0) {
                    let decimals = await Contract.decimals();
                    let balance = balance_wei / 10 ** decimals;
                    console.log(tokens[key].address);
                    console.log(tokens[key].decimals);
                    console.log(tokens[key].symbol);
                    console.log(balance);
                }
            }
        }
    

您可以使用 Multicall contract for small wins. A proper solution is indexers like TheGraph 连续读取区块链并保持可用索引数据。