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); }
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); }