stratum-v2

This skill should be used when the user asks "what is Stratum v2", "mining protocol v2", "binary mining protocol", "encrypted mining", "job declaration protocol", or needs to understand Stratum v2 for BSV mining infrastructure.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "stratum-v2" with this command: npx skills add b-open-io/bsv-skills/b-open-io-bsv-skills-stratum-v2

Stratum v2 Mining Protocol

Stratum v2 is the next-generation mining protocol developed by Braiins (Slush Pool), designed to address the limitations of Stratum v1. It introduces binary framing, end-to-end encryption, and decentralized job declaration.

When to Use

  • Planning mining infrastructure upgrades
  • Evaluating v1 to v2 migration
  • Understanding modern mining security
  • Implementing next-gen pool software
  • Building decentralized mining solutions

Key Improvements Over v1

FeatureStratum v1Stratum v2
FormatJSON-RPC textBinary framed
Bandwidth~100% baseline~30% reduction
EncryptionNone (plaintext)Noise Protocol (AEAD)
AuthenticationPassword-basedCryptographic
Job SelectionPool-controlledMiner-declarable
EfficiencyHigher latencyLower latency

Protocol Architecture

Stratum v2 consists of three subprotocols:

1. Mining Protocol

Core work distribution between pool and miners.

2. Job Declaration Protocol

Allows miners to construct their own block templates.

3. Template Distribution Protocol

Distributes block templates from Bitcoin nodes to pools/miners.

Binary Framing

Message Structure

+------------------+------------------+------------------+
| Extension Type   | Message Type     | Message Length   |
| (2 bytes)        | (1 byte)         | (3 bytes)        |
+------------------+------------------+------------------+
|                      Payload                           |
|                   (variable length)                    |
+--------------------------------------------------------+

Data Types

TypeDescriptionSize
U8Unsigned 8-bit1 byte
U16Unsigned 16-bit LE2 bytes
U24Unsigned 24-bit LE3 bytes
U32Unsigned 32-bit LE4 bytes
U256256-bit hash32 bytes
STR0_255Length-prefixed string1 + n bytes
B0_32Length-prefixed bytes1 + n bytes
B0_64KLength-prefixed bytes2 + n bytes
SEQ0_64KSequence of items2 + items

Channel Types

Standard Channel

  • Basic mining operations
  • Fixed extranonce size
  • Pool-assigned difficulty

Extended Channel

  • Larger extranonce support
  • Custom coinbase prefix
  • Header-only mining mode

Group Channel

  • Aggregates multiple miners
  • Proxy/farm configurations
  • Efficient multiplexing

Encryption (Noise Protocol)

Stratum v2 uses the Noise Protocol Framework with:

  • Handshake: Noise_NX_secp256k1_ChaChaPoly_SHA256
  • Cipher: ChaCha20-Poly1305 (AEAD)
  • Curve: secp256k1
  • Hash: SHA-256

Connection Flow

1. Client initiates Noise handshake
2. Server provides certificate (signed by authority)
3. Encrypted channel established
4. All subsequent messages encrypted

Security Benefits

  • Man-in-the-middle protection
  • Hashrate hijacking prevention
  • Pool impersonation prevention
  • Privacy for miner operations

Mining Protocol Messages

Setup Messages

SetupConnection

{
  protocol: U32,
  min_version: U16,
  max_version: U16,
  flags: U32,
  endpoint_host: STR0_255,
  endpoint_port: U16,
  vendor: STR0_255,
  hardware_version: STR0_255,
  firmware: STR0_255,
  device_id: STR0_255
}

SetupConnection.Success

{
  used_version: U16,
  flags: U32
}

Channel Messages

OpenStandardMiningChannel

{
  request_id: U32,
  user_identity: STR0_255,
  nominal_hash_rate: F32,
  max_target: U256
}

OpenStandardMiningChannel.Success

{
  request_id: U32,
  channel_id: U32,
  target: U256,
  extranonce_prefix: B0_32,
  group_channel_id: U32
}

Job Messages

NewMiningJob

{
  channel_id: U32,
  job_id: U32,
  future_job: BOOL,
  version: U32,
  version_rolling_allowed: BOOL
}

SetNewPrevHash

{
  channel_id: U32,
  job_id: U32,
  prev_hash: U256,
  min_ntime: U32,
  nbits: U32
}

Share Submission

SubmitSharesStandard

{
  channel_id: U32,
  sequence_number: U32,
  job_id: U32,
  nonce: U32,
  ntime: U32,
  version: U32
}

SubmitShares.Success

{
  channel_id: U32,
  last_sequence_number: U32,
  new_submits_accepted_count: U32,
  new_shares_sum: U64
}

Job Declaration Protocol

Enables miners to select transactions for blocks:

Flow

  1. Miner connects to Template Distribution node
  2. Miner receives block template with transactions
  3. Miner declares custom job to pool
  4. Pool validates and accepts declaration
  5. Miner works on self-constructed block

Messages

DeclareMiningJob

{
  request_id: U32,
  mining_job_token: B0_255,
  version: U32,
  coinbase_prefix: B0_64K,
  coinbase_suffix: B0_64K,
  tx_short_hash_nonce: U64,
  tx_short_hash_list: SEQ0_64K[U64],
  tx_hash_list_hash: U256,
  excess_data: B0_64K
}

Benefits

  • Decentralizes transaction selection
  • Reduces pool censorship risk
  • Improves Bitcoin decentralization
  • Miners control block content

Template Distribution Protocol

Distributes templates from Bitcoin node to pools/miners:

NewTemplate

{
  template_id: U64,
  future_template: BOOL,
  version: U32,
  coinbase_tx_version: U32,
  coinbase_prefix: B0_64K,
  coinbase_tx_input_sequence: U32,
  coinbase_tx_value_remaining: U64,
  coinbase_tx_outputs_count: U32,
  coinbase_tx_outputs: B0_64K,
  coinbase_tx_locktime: U32,
  merkle_path: SEQ0_255[U256]
}

Comparison: v1 vs v2 Session

Stratum v1 Session

Client: {"method":"mining.subscribe","params":["Agent/1.0"],"id":1}
Server: {"result":[[["mining.set_difficulty","1"],["mining.notify","1"]],"08000000",4],"id":1}
Client: {"method":"mining.authorize","params":["user.worker",""],"id":2}
Server: {"result":true,"id":2}
Server: {"method":"mining.set_difficulty","params":[1024]}
Server: {"method":"mining.notify","params":["job1","prev...","cb1","cb2",[],"ver","bits","time",true]}
Client: {"method":"mining.submit","params":["user.worker","job1","00000000","time","nonce"],"id":3}
Server: {"result":true,"id":3}

Stratum v2 Session

1. Noise handshake (encrypted channel established)
2. SetupConnection → SetupConnection.Success
3. OpenStandardMiningChannel → OpenStandardMiningChannel.Success
4. SetTarget (difficulty)
5. NewMiningJob + SetNewPrevHash (job assignment)
6. SubmitSharesStandard → SubmitShares.Success

Migration Considerations

When to Migrate

  • Security is priority (MITM protection needed)
  • Bandwidth costs significant
  • Decentralization goals
  • Modern infrastructure refresh

When to Stay on v1

  • Legacy hardware compatibility
  • Existing stable infrastructure
  • Simple pool operations
  • No security concerns

Hybrid Approach

Many pools run both:

  • v1 on port 3333 (legacy compatibility)
  • v2 on port 3334 (modern miners)

Translation proxies can bridge v1 miners to v2 pools.

BSV Considerations

Current State

  • BSV pools primarily use Stratum v1
  • GorillaPool uses optimized v1 implementation
  • v2 adoption depends on ASIC firmware support

BSV-Specific Features

  • Large block templates (transaction selection matters)
  • getminingcandidate RPC (BSV-specific)
  • submitminingsolution RPC (BSV-specific)
  • Higher transaction throughput

Implementation Path

  1. Start with Stratum v1 (proven, compatible)
  2. Add v2 support when ASIC ecosystem ready
  3. Maintain both for transition period

Reference Implementation

Stratum Reference Implementation (SRI):

Components:

  • roles/pool - Mining pool role
  • roles/mining-proxy - Proxy/translator
  • roles/jd-client - Job declaration client
  • roles/jd-server - Job declaration server

Resources

Implementation Status

ComponentAvailability
Protocol SpecComplete
Reference ImplementationProduction
Pool SupportGrowing
ASIC FirmwareLimited
BSV SupportFuture

Quick Reference

Stratum v2 Ports (typical):

  • 3334 - Mining Protocol (encrypted)
  • 8442 - Template Distribution
  • 8443 - Job Declaration

Key Crates (Rust):

[dependencies]
binary_sv2 = "1.0"
codec_sv2 = "1.0"
framing_sv2 = "1.0"
noise_sv2 = "1.0"

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

create-script-template

No summary provided by upstream source.

Repository SourceNeeds Review
General

key-derivation

No summary provided by upstream source.

Repository SourceNeeds Review
General

stratum-v1

No summary provided by upstream source.

Repository SourceNeeds Review
General

check-bsv-price

No summary provided by upstream source.

Repository SourceNeeds Review