# Stratum Apps

Complete Stratum V2 application development kit - all utilities in one crate.

## Overview

`stratum-apps` is a unified crate that provides all the utilities needed for building Stratum V2 applications.

## Architecture

This crate is organized into several main modules:

- **`network_helpers`** - High-level networking utilities (from `network_helpers_sv2`)
- **`config_helpers`** - Configuration management helpers (from `config_helpers_sv2`)  
- **`payout`** - Shared payout-mode parsing and coinbase-output distribution helpers
- **`fallback_coordinator`** - Runtime fallback cancellation and acknowledgement helpers

The crate also re-exports `stratum-core`, the central hub for the Stratum V2 ecosystem that provides a cohesive API for all low-level protocol functionality.
With the `bitcoin-core-sv2` feature enabled, it also re-exports `bitcoin_core_sv2` runtime APIs.

## Quick Start

Add to your `Cargo.toml`:

```toml
[dependencies]
stratum-apps = { version = "0.4.0", features = ["pool"] }
```

Basic usage:

```rust
use stratum_apps::{network_helpers, config_helpers};
```

## Features

### Core Features
- `network` - Networking utilities (enabled by default)
- `fallback-coordinator` - Runtime fallback coordination helpers (enabled by default)
- `config` - Configuration helpers (enabled by default)
- `payout` - Shared payout-mode parsing and coinbase-output distribution helpers (optional)
- `monitoring` - HTTP and Prometheus monitoring helpers (optional)
  - Uses vendored Swagger UI assets to support offline/sandboxed documentation builds
- `std` - Standard-library support for key and random utilities (enabled by default)
- `core` - Re-export and enable `stratum-core`
- `bitcoin-core-sv2` - Re-export and enable `bitcoin_core_sv2`

### Protocol Features
- `sv1` - Enable SV1 protocol support (includes translation utilities)
- `with_buffer_pool` - Enable buffer pooling for better performance

### Role-Specific Bundles
- `pool` - Pool application helpers, including networking, config, buffer pooling, core protocol types, payout helpers, and Bitcoin Core IPC runtime APIs
- `jd_client` - Job Declaration Client helpers, including networking, fallback coordination, config, buffer pooling, core protocol types, and Bitcoin Core IPC runtime APIs
- `jd_server` - Job Declaration Server config helpers and Bitcoin Core IPC runtime APIs
- `translator` - Translator Proxy helpers, including networking, fallback coordination, config, SV1 translation, buffer pooling, and payout helpers
- `mining_device` - Mining device config helpers

Third-party applications that only need payout parsing or verification can use the smaller feature
set:

```toml
[dependencies]
stratum-apps = { version = "0.4.0", default-features = false, features = ["payout"] }
```

## Usage Examples

### Pool Application

```toml
[dependencies]
stratum-apps = { version = "0.4.0", features = ["pool"] }
```

```rust
use stratum_apps::{network_helpers, config_helpers};

// Use networking
let connection = network_helpers::Connection::new(stream, HandshakeRole::Responder).await?;

// Use configuration
let config: PoolConfig = config_helpers::parse_config("pool.toml")?;
```
