def METHOD_NAME(self, minipools):
    m_d = rp.get_contract_by_name("rocketMinipoolDelegate")
    m = rp.assemble_contract("rocketMinipool", address=minipools[0])
    mc = rp.get_contract_by_name("multicall3")
    lambs = [
        lambda x: (x, rp.seth_sig(m_d.abi, "getNodeFee"), [((x, "NodeFee"), solidity.to_float)]),
        lambda x: (x, rp.seth_sig(m.abi, "getEffectiveDelegate"), [((x, "Delegate"), None)]),
        lambda x: (x, rp.seth_sig(m.abi, "getPreviousDelegate"), [((x, "PreviousDelegate"), None)]),
        lambda x: (x, rp.seth_sig(m.abi, "getUseLatestDelegate"), [((x, "UseLatestDelegate"), None)]),
        lambda x: (x, rp.seth_sig(m.abi, "getNodeDepositBalance"), [((x, "NodeOperatorShare"), lambda i: solidity.to_float(i) / 32)]),
        # get balances of minipool as well
        lambda x: (mc.address, [rp.seth_sig(mc.abi, "getEthBalance"), x], [((x, "EthBalance"), solidity.to_float)])
    ]
    minipool_stats = {}
    batch_size = 10_000 // len(lambs)
    for i in range(0, len(minipools), batch_size):
        i_end = min(i + batch_size, len(minipools))
        log.debug(f"getting minipool stats for {i}-{i_end}")
        addresses = minipools[i:i_end]
        calls = [
            Call(*lamb(a))
            for a in addresses
            for lamb in lambs
        ]
        res = rp.multicall2_do_call(calls)
        # add data to mini pool stats dict (address => {func_name: value})
        # strip get from function name
        for (address, variable_name), value in res.items():
            if address not in minipool_stats:
                minipool_stats[address] = {}
            minipool_stats[address][variable_name] = value
    return minipool_stats