#ifndef MINING_PAYMENT_H #define MINING_PAYMENT_H #include "esp_err.h" #include #include #define MINING_SHARE_WINDOW_S 30 #define MINING_BLOCK_SUBSIDY_SATS 312500000ULL #define MINING_BLOCKS_PER_DAY 144ULL #define MINING_MAX_CLIENTS 10 typedef struct { uint32_t ip; uint64_t shares_accepted; uint64_t shares_rejected; int64_t first_share_time_ms; int64_t last_share_time_ms; double hashrate_ghs; } mining_client_stats_t; uint64_t mining_nbits_to_difficulty(uint32_t nbits); double mining_calculate_hashprice(uint32_t nbits); double mining_calculate_hashprice_override(uint64_t sats_per_ghs_day); esp_err_t mining_validate_share(const uint8_t *header80, uint32_t nonce, const uint8_t *target, int target_len); uint64_t mining_shares_to_allotment_ms(double hashrate_ghs, double hashprice_sats_per_ghs_s, int price_per_step, int step_size_ms); uint64_t mining_shares_to_allotment_bytes(double hashrate_ghs, double hashprice_sats_per_ghs_s, int price_per_step, int step_size_bytes); mining_client_stats_t *mining_get_or_create_client(uint32_t client_ip); void mining_update_hashrate(uint32_t client_ip, bool accepted); const mining_client_stats_t *mining_get_client_stats(uint32_t client_ip); double mining_get_current_hashprice(void); void mining_set_current_nbits(uint32_t nbits); void mining_payment_init(void); #endif