Balancer以太坊主网项目的数据抓取

//引入web3
const Web3 = require('web3');
const util = require('ethereumjs-util');
//部署合约的abi
const BPoolABI = require('./BPoolABI.json');
const ERC20ABI = require("./ERC20.json")
// const BigNumber = require('bignumber.js')
const web3 = new Web3('https://mainnet.infura.io/v3/45192e3bb296499a93ef0a73c0eb159a');

//部署到链上的合约的地址
const factoryAddress = '0x9424B1412450D0f8Fc2255FAf6046b98213B76Bd';
const BPoolAddress = '0x165a50Bc092f6870DC111C349baE5Fc35147ac86';

web3.eth.getTransactionCount('0x9424B1412450D0f8Fc2255FAf6046b98213B76Bd').then(console.log);

async function PoolsMassege(){
    //创建一个存放所有池的地址的数组
    var addressPoll = new Array();
    var sender = "9424B1412450D0f8Fc2255FAf6046b98213B76Bd";

    for(let nonce = 1; nonce<3; nonce++) {
        
        var address = util.generateAddress(Buffer.from(sender,"hex"),nonce).toString("hex");
        let result = await web3.eth.getTransactionCount(`0x${address}`); 
        if (result == 1) {
            var addressPoll_01 = '0x'+address;
            //allPool:为返回的数据长度
            var allPool = addressPoll.push(addressPoll_01);

            } else {
                console.log('null_poll:0x'+ address);
            }
     }

    let Pools = [];
    for(let item of addressPoll) {
        let MyContract = new web3.eth.Contract(BPoolABI, item);
        let isPublicSwap = await MyContract.methods.isPublicSwap().call();

        let SwapFee = await MyContract.methods.getSwapFee().call();
        //在该池中存在的 Tonken 数
        let NumTokens =  await MyContract.methods.getNumTokens().call();
        //获取池子中具体的 Token
        let CurrentTokens = await MyContract.methods.getCurrentTokens().call();
        let getTotalDenormalizedWeight = await MyContract.methods.getTotalDenormalizedWeight().call();
        //获取池的控制者地址
        let getController = await MyContract.methods.getController().call();
        //池的最终确定,不可更改
        let isFinalized = await MyContract.methods.isFinalized().call();
        
        let token=[];
        for (const tokenID of CurrentTokens) {
            try {
                //通过 ERC20 的 ABI 创建实例获取其余遵循 ERC20 规则的币的相关信息,(MKR币不遵循)
                let MyContract_01 = new web3.eth.Contract(ERC20ABI, tokenID); 
                //获取该 Toten 的余额
                let getBalance = await MyContract.methods.getBalance(tokenID).call();
                //获取该 Token 的精度
                let decimals = await MyContract_01.methods.decimals().call();
            
                let id = item +"-"+ tokenID;
                获取规约前的权重
                let DenormalizedWeight = await MyContract.methods.getDenormalizedWeight(tokenID).call();
                //获取规约后的权重,所有令牌的组合归一化权重总和将为1。(注:由于除法精度损失,实际和可能为1加减几微)
                let NormalizedWeight = await MyContract.methods.getNormalizedWeight(tokenID).call();
                //获取 Token 的名字
                var symbol = await MyContract_01.methods.symbol().call();
                //绑定 Token(令牌) 具有有效的余额和权重。
                let isBound = await MyContract.methods.isBound(tokenID).call();
                token.push({
                    "addrrs":tokenID,
                    "Balance":getBalance,
                    "id":id,
                    "DenormalizedWeight":DenormalizedWeight,
                    "NormalizedWeight":NormalizedWeight,
                    "decimals":decimals,
                    "symbol":symbol,
                    "isBound":isBound
                })
            } catch (error) {
                console.log(error);
            }         
        }
        let Pools_obj = {
            "poll_id": item,
            "PublicSwap":isPublicSwap,
            "SwapFee":SwapFee,
            "NumTokens":NumTokens,
            "TokensList":CurrentTokens,
            "Tokens":token,
            "Weight":getTotalDenormalizedWeight,
            "PoolController":getController,
            "isFinalized":isFinalized,           
        }
        Pools.push(Pools_obj);
    }
    console.log(JSON.stringify(Pools));     
}
PoolsMassege();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雲小妖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值