synor/sdk/cpp/include/synor/mining.hpp
Gulshan Yadav 6607223c9e feat(sdk): complete Phase 4 SDKs for all remaining languages
Add Economics, Governance, and Mining SDKs for:
- Java: Full SDK with CompletableFuture async operations
- Kotlin: Coroutine-based SDK with suspend functions
- Swift: Modern Swift SDK with async/await
- Flutter/Dart: Complete Dart SDK with Future-based API
- C: Header files and implementations with opaque handles
- C++: Modern C++17 with std::future and PIMPL pattern
- C#: Records, async/await Tasks, and IDisposable
- Ruby: Struct-based types with Faraday HTTP client

Also includes minor Dart lint fixes (const exceptions).
2026-01-28 08:33:20 +05:30

334 lines
7.4 KiB
C++

/**
* @file mining.hpp
* @brief Synor Mining SDK for C++
*
* Modern C++17 SDK for pool connections, block templates, hashrate stats, and GPU management.
*/
#pragma once
#include <string>
#include <vector>
#include <optional>
#include <future>
#include <memory>
#include <cstdint>
#include "wallet.hpp" // For SynorException
namespace synor {
namespace mining {
/// Device type
enum class DeviceType {
Cpu,
GpuNvidia,
GpuAmd,
Asic
};
/// Device status
enum class DeviceStatus {
Idle,
Mining,
Error,
Offline
};
/// Connection status
enum class ConnectionStatus {
Disconnected,
Connecting,
Connected,
Reconnecting
};
/// Time period for stats
enum class TimePeriod {
Hour,
Day,
Week,
Month,
All
};
/// Submit result status
enum class SubmitStatus {
Accepted,
Rejected,
Stale
};
/// Mining configuration
struct Config {
std::string api_key;
std::string endpoint = "https://mining.synor.io/v1";
uint32_t timeout_ms = 60000;
uint32_t retries = 3;
bool debug = false;
};
/// Pool configuration
struct PoolConfig {
std::string url;
std::string user;
std::optional<std::string> password;
std::optional<std::string> algorithm;
std::optional<double> difficulty;
};
/// Stratum connection
struct StratumConnection {
std::string id;
std::string pool;
ConnectionStatus status;
std::string algorithm;
double difficulty;
int64_t connected_at;
int32_t accepted_shares;
int32_t rejected_shares;
int32_t stale_shares;
std::optional<int64_t> last_share_at;
};
/// Pool stats
struct PoolStats {
std::string url;
int32_t workers;
double hashrate;
double difficulty;
int64_t last_block;
int32_t blocks_found_24h;
double luck;
};
/// Template transaction
struct TemplateTransaction {
std::string txid;
std::string data;
std::string fee;
int32_t weight;
};
/// Block template
struct BlockTemplate {
std::string id;
std::string previous_block_hash;
std::string merkle_root;
int64_t timestamp;
std::string bits;
int64_t height;
std::string coinbase_value;
std::vector<TemplateTransaction> transactions;
std::string target;
std::string algorithm;
std::string extra_nonce;
};
/// Mined work
struct MinedWork {
std::string template_id;
std::string nonce;
std::string extra_nonce;
int64_t timestamp;
std::string hash;
};
/// Share info
struct ShareInfo {
std::string hash;
double difficulty;
int64_t timestamp;
bool accepted;
};
/// Submit result
struct SubmitResult {
SubmitStatus status;
ShareInfo share;
bool block_found;
std::optional<std::string> reason;
std::optional<std::string> block_hash;
std::optional<std::string> reward;
};
/// Hashrate
struct Hashrate {
double current;
double average_1h;
double average_24h;
double peak;
std::string unit;
};
/// Share stats
struct ShareStats {
int32_t accepted;
int32_t rejected;
int32_t stale;
int32_t total;
double accept_rate;
};
/// Device temperature
struct DeviceTemperature {
double current;
double max;
bool throttling;
};
/// Earnings snapshot
struct EarningsSnapshot {
std::string today;
std::string yesterday;
std::string this_week;
std::string this_month;
std::string total;
std::string currency;
};
/// Mining stats
struct MiningStats {
Hashrate hashrate;
ShareStats shares;
int64_t uptime;
double efficiency;
EarningsSnapshot earnings;
std::optional<double> power_consumption;
std::optional<DeviceTemperature> temperature;
};
/// Earnings breakdown
struct EarningsBreakdown {
int64_t date;
std::string amount;
int32_t blocks;
int32_t shares;
double hashrate;
};
/// Earnings report
struct Earnings {
TimePeriod period;
int64_t start_date;
int64_t end_date;
std::string amount;
int32_t blocks;
int32_t shares;
double average_hashrate;
std::string currency;
std::vector<EarningsBreakdown> breakdown;
};
/// Mining device
struct MiningDevice {
std::string id;
std::string name;
DeviceType type;
DeviceStatus status;
double hashrate;
double temperature;
double fan_speed;
double power_draw;
int64_t memory_used;
int64_t memory_total;
std::optional<std::string> driver;
std::optional<std::string> firmware;
};
/// Device configuration
struct DeviceConfig {
bool enabled;
std::optional<int32_t> intensity;
std::optional<int32_t> power_limit;
std::optional<int32_t> core_clock_offset;
std::optional<int32_t> memory_clock_offset;
std::optional<int32_t> fan_speed;
};
/// Worker info
struct WorkerInfo {
std::string id;
std::string name;
ConnectionStatus status;
Hashrate hashrate;
ShareStats shares;
std::vector<MiningDevice> devices;
int64_t last_seen;
int64_t uptime;
};
/// Mining algorithm
struct MiningAlgorithm {
std::string name;
std::string display_name;
std::string hash_unit;
std::string profitability;
double difficulty;
std::string block_reward;
int32_t block_time;
};
// Forward declaration
class SynorMiningImpl;
/// Synor Mining client
class SynorMining {
public:
explicit SynorMining(const Config& config);
~SynorMining();
SynorMining(const SynorMining&) = delete;
SynorMining& operator=(const SynorMining&) = delete;
SynorMining(SynorMining&&) noexcept;
SynorMining& operator=(SynorMining&&) noexcept;
// Pool operations
std::future<StratumConnection> connect(const PoolConfig& pool);
std::future<void> disconnect();
std::future<StratumConnection> get_connection();
std::future<PoolStats> get_pool_stats();
bool is_connected() const;
// Mining operations
std::future<BlockTemplate> get_block_template();
std::future<SubmitResult> submit_work(const MinedWork& work);
std::future<void> start_mining(std::optional<std::string> algorithm = std::nullopt);
std::future<void> stop_mining();
std::future<bool> is_mining();
// Stats operations
std::future<Hashrate> get_hashrate();
std::future<MiningStats> get_stats();
std::future<Earnings> get_earnings(std::optional<TimePeriod> period = std::nullopt);
std::future<ShareStats> get_share_stats();
// Device operations
std::future<std::vector<MiningDevice>> list_devices();
std::future<MiningDevice> get_device(const std::string& device_id);
std::future<MiningDevice> set_device_config(const std::string& device_id,
const DeviceConfig& config);
std::future<void> enable_device(const std::string& device_id);
std::future<void> disable_device(const std::string& device_id);
// Worker operations
std::future<std::vector<WorkerInfo>> list_workers();
std::future<WorkerInfo> get_worker(const std::string& worker_id);
std::future<void> remove_worker(const std::string& worker_id);
// Algorithm operations
std::future<std::vector<MiningAlgorithm>> list_algorithms();
std::future<MiningAlgorithm> get_algorithm(const std::string& name);
std::future<void> switch_algorithm(const std::string& algorithm);
std::future<MiningAlgorithm> get_most_profitable();
// Lifecycle
void close();
bool is_closed() const;
std::future<bool> health_check();
private:
std::unique_ptr<SynorMiningImpl> impl_;
};
} // namespace mining
} // namespace synor