Exemplo n.º 1
0
        private async Task <Dictionary <int, decimal> > CalculateTheFullEnergyConsumptionPerTransactionPerYear(
            BlockParameters blockParameters)
        {
            var networkHashRateInTHs = await _networkHashRateService.GetDailyHashRateInPastAsync(blockParameters.TimeOfBlockMining); // Provided in TH/s

            var energyConsumptionPerYear = new Dictionary <int, decimal>();

            var devices = await _miningHardwareService.GetHardwareByMiningAlgorithm(MiningAlgorithm.SHA256);

            foreach (var device in devices)
            {
                var value = CalculateFullEnergyConsumptionPerTransactionInKwhByDevice(blockParameters, networkHashRateInTHs, device);
                energyConsumptionPerYear.Add(device.ProductionYear, value);
            }
            return(energyConsumptionPerYear);
        }
Exemplo n.º 2
0
        private static decimal CalculateFullEnergyConsumptionPerTransactionInKwhByDevice(BlockParameters blockParameters, decimal networkHashRateInTHs, MiningDevice device)
        {
            var avgMachineHashRateInTHs          = device.HashRate / 1000000000000m;          // Average hashrate of a machine converted to TH/s from H/s
            var avgMachineEnergyConsumptionInKWH = device.PowerConsumption / 1000m;           // Average machine energy consumption converted to KW/h from W/h

            var noOfMachinesDoingTheMinning = networkHashRateInTHs / avgMachineHashRateInTHs; // The number of machines that were doing the mining for that block, under the assumption that all of them mined
            var energyConsumptionPerMachinePerBlockInKWH = avgMachineEnergyConsumptionInKWH * blockParameters.BlockTimeInSeconds / 3600m;

            var fullEnergyConsumptionPerTransactionInKWH = noOfMachinesDoingTheMinning * energyConsumptionPerMachinePerBlockInKWH / blockParameters.NumberOfTransactionsInBlock;

            return(fullEnergyConsumptionPerTransactionInKWH);
        }