Mining profiles help you optimize your mining operation based on parameters like electricity price and other fixed costs. Setting up a mining profile is crucial for Hashman’s advanced optimization engine.
In the automation page, you can see a list of your mining profiles and their characteristics. You can also view preview charts of a mining profile. This preview charts the relevant parameters for mining operations: hash price, efficiency breakeven thresholds for a given mining profile, total electricity cost, transaction fees, and network hashrate/difficulty.
Create a profile: Set up new profiles for different mining scenarios, press the create mining profile button on the top right corner
Edit profile: Edit an existing mining profile
Preview profile: Select the profile to view the preview of relevant parameters for mining operations
Mining profiles
Mining profiles define how your ASICs operate based on electricity prices and market conditions. They are the core automation mechanism in Hashman.
Overview
A mining profile contains:
Pool configurations
Power usage limits
Pricing rules
When active, a profile continuously evaluates conditions and automatically adjusts your mining operations for optimal profitability.
Hashman has a built-in powerful language called HPDL (Hashman Price Definition Language) designed to handle even the most complex electricity pricing scenarios. This language allows for the creation of dynamic pricing models that can use varying contract prices, different types of taxes, and changes in rates over time.
The scripting language supports conditional statements, date-based rules, and mathematical operations, providing flexibility in defining electricity prices. Below are some examples of how to use the Hashman scripting language for price definitions:
Simple market based contract
For a simpler market based contract, we can just use the spot price.
fees = 10 EUR/MWh # assume that all of the applicable marginal costs are included in this
ExcessPowerPrice = SpotMarketPrice("nordpool/FI") + fees
Simple fixed price contract
For a simple fixed price contract, we only need to specify "ExcessPowerPrice" which is otherwise the price which applies after "ContractedCapacity" is exceeded. In this case, the default ContractedCapacity is 0, so there is nothing else to specify.
ExcessPowerPrice = 50 EUR/MWh
Fixed price power contract
For a fixed price power contract, we need to specify four components:
1. ContractedCapacity - how much power is contracted (Watts, W; can be specified in kW or MW also)
2. UnusedPowerPrice- the price received for unused power per MWh
3. FixedCapacityPrice - the price paid for the contracted power per MWh
4.ExcessPowerPrice - the price paid for the excess power per MWh if ContractedCapacity is exceeded
fees = 6.6 EUR/MWh # assume that all of the applicable marginal costs are included in this
ContractedCapacity = 1 MW
UnusedPowerPrice = SpotMarketPrice("nordpool/FI") # we assume that no consumption fees are applied for sold, unused power
FixedCapacityPrice = 40 EUR/MWh + fees
ExcessPowerPrice = SpotMarketPrice("nordpool/FI") + fees
Complex power price contract
This complex power price contract has multiple separate contracts for various timeframes and supports area price differences.
# For this price definition example, we have three separate contracts:
# 1. October with 1 MW of contracted capacity
# 2. November with 1.5 MW of contracted capacity
# 3. No contract before and after those dates
#
# Furthermore, the contracts fixed for Nordpool system prices only (nordpool/SYS)
# The remainder, i.e. the difference between nordpool/FI and nordpool/SYS, is based on the market prices and applied on top of the fixed price.
#
# We compute a separate variable for the area price difference
# This can be used anywhere. If not used, we still see this visualized.
area_price_diff = SpotMarketPrice("nordpool/FI") - SpotMarketPrice("nordpool/SYS")
fees = 4.2018 EUR/MWh
# We have a contract for October with 1 MW of contracted capacity,
# and then we have a contract for November with 1.5 MW of contracted capacity.
# Before and after those dates, we have no contract, and ContractedCapacity is 0.
ContractedCapacity = WHEN {
DATE IN [2024-10-01..2024-10-31]: 1 MW
DATE IN [2024-11-01..2024-11-30]: 1.5 MW
DEFAULT: 0 W
}
FixedCapacityPrice = WHEN {
DATE IN [2024-10-01..2024-10-31]: 37.51 EUR/MWh + area_price_diff + fees
DATE IN [2024-11-01..2024-11-30]: 45.20 EUR/MWh + area_price_diff + fees
DEFAULT: 0 EUR/MWh
}
UnusedPowerPrice = SpotMarketPrice("nordpool/FI")
ExcessPowerPrice = SpotMarketPrice("nordpool/FI") + fees
@title Area Price Difference
@description Difference between area price and system price
area_price_diff = SpotMarketPrice("nordpool/FI") - SpotMarketPrice("nordpool/SYS")
@title Effective Contract Price
@description The effective price paid per MWh. 40 EUR/MWh base + area price difference
effective_contract_price = WHEN {
DATE IN [2024-10-01..2024-10-31]: 32.65 + area_price_diff
DATE IN [2024-11-01..2024-11-30]: 40 + area_price_diff
DEFAULT: SpotMarketPrice("nordpool/FI") # spot price assumed by default
}
margin = WHEN {
DATE IN [2024-10-01..2024-10-31]: 6 EUR/MWh
DATE IN [2024-11-01..2024-11-30]: 6 EUR/MWh
DEFAULT: 0 EUR/MWh
}
ContractedCapacity = WHEN {
DATE IN [2024-10-01..2024-10-31]: 1 MW
DATE IN [2024-11-01..2024-11-30]: 1 MW
DEFAULT: 0 MW
}
@title Tax Class 1: 2.827515 c/kWh, incl. VAT 25.5% and security of supply fee
electricity_tax1_cents_per_kWh = 2.827515 # c/kWh
@title Tax Class 2: 0.079065 c/kWh, incl. VAT 25.5% and security of supply fee
electricity_tax2_cents_per_kWh = 0.079065 # c/kWh
electricity_tax = electricity_tax2_cents_per_kWh * 1000 / 100 / 1.255 # c/kWh -> c/MWh -> EUR/MWh without VAT (approx.)
@title Transmission Fee
transmission_fee = WHEN {
@title Winter Weekdays (Dec-Feb, Mon-Fri, 7am-9pm)
MONTH IN [DEC..FEB]
AND DAYOFWEEK IN [MON..FRI]
# I.e. 7:00:00 to 20:59:59
AND HOUR IN [7..20]: 14.18
@title Other Times
DEFAULT: 6.55
}
UnusedPowerPrice = SpotMarketPrice("nordpool/FI") # the price at which the power is sold to the grid
ContractedPowerPrice = effective_contract_price + transmission_fee + electricity_tax + margin
ExcessPowerPrice = SpotMarketPrice("nordpool/FI") + transmission_fee + electricity_tax
Some things to take into account when using the scripting language:
Functions available in SpotMarketPrice aremin, and max. Otherwise, only +, -, *, / and WHEN statements can be used. The WHEN statement must always include a DEFAULT clause.
Numbers can optionally have units. If capacity units are present, they should be used, for example, 1 MW -equals one million W, etc.
For other quantities, use the profile price units, such as EUR/MWh or USD/MWh.
@titlecan be used for titles and # for comments
If you have any questions or need help, please send an email to contact@hashman.app