function handleRing(
        uint64       _ringIndex,
        RingParams   params,
        OrderState[] orders,
        TokenTransferDelegate delegate
        )
        private
    {
        address _lrcTokenAddress = lrcTokenAddress;
        
        verifyRingHasNoSubRing(params.ringSize, orders);
        
        
        
        verifyMinerSuppliedFillRates(params.ringSize, orders);
        
        
        
        scaleRingBasedOnHistoricalRecords(delegate, params.ringSize, orders);
        
        
        
        
        calculateRingFillAmount(params.ringSize, orders);
        
        
        
        calculateRingFees(
            delegate,
            params.ringSize,
            orders,
            _lrcTokenAddress
        );
        
        bytes32[] memory orderInfoList = settleRing(
            delegate,
            params.ringSize,
            orders,
            params.feeRecipient,
            _lrcTokenAddress
        );
        emit RingMined(
            _ringIndex,
            params.ringHash,
            tx.origin,
            params.feeRecipient,
            orderInfoList
        );
    }