igneum/pool/Cargo.toml
igneum-labs 633e211c91 Pool finished (mission item 11): pool-0's fee published beside the dev fee, TLS 1.3 on the member port with the authorize binding (spec 9.3, O-9.7 closed), the page rows Q68 to Q73, and the open pool: a share sidechain with no operator (spec 9.12)
Pool-0: welcome carries software_dev_fee_percent beside the pool fee, the page's Fees row and site/miner.html say pool-0 charges the same 1 percent as the solo dev fee; jobs and seeds carry the latency ladder's rung for 0.3.19.

TLS (pool/src/tls.rs): --tls-cert/--tls-key or --tls-self-signed (a P-256 pair under the data dir, the certificate pin printed at start); the binding is the member's BLS signature over this connection's exporter (label EXPORTER-igneum-pool-binding, context the chain id), refused on any other connection; testnet and mainnet refuse the clear without --allow-plain. HiveOS: pools:// and POOL_PIN.

Page rows: node state in words (Q68), one formatter set and luck in MiningPoolStats' convention (Q69), samples and check costs persisted (Q70), payments under the lookup (Q71), hourly history with a sparkline, --alert-webhook, /metrics, /health on the node (Q72), the network's finality state beside "payouts follow blue confirmation, not finality" (Q73).

The open pool (pool/src/sidechain.rs, open.rs, p2p.rs; igneum-pool --open): the member's own node and daemon, no payout key, no balance; every coinbase carries the member's own address, the share chain's parent (IGNS) and the window's split (IGNP); templates re-stamped on a new chain tip without a node call; shares gossiped and checked by every member (structure, the node's seeds, the PoW); heaviest work wins, a fork's loser is stale; the dev fee as one split entry; shares.log and verify-share for the drop proof; the gate harness pool/tools/open-gate.mjs. The node side (the executor's split from pool_split_activation_daa) is on the fork branch pool-finish-node.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 3e5271ba6a)
2026-10-07 14:03:05 +00:00

61 lines
2.6 KiB
TOML

[package]
name = "igneum-pool"
version = "0.1.0"
edition = "2024"
description = "Igneum mining pool v0: spec 09 pool protocol over newline JSON, vardiff, CPU warp-verified shares, PPLNS payouts on the EVM side, the stats API WhatToMine and MiningPoolStats read"
license = "MIT"
publish = false
# A standalone workspace. The node fork is read by path from ../vendor/igneum-node (the fork checkout, or a symlink
# to the fork worktree that carries the pool-mode miner); igneum-pow is the repository's own crate.
[workspace]
[[bin]]
name = "igneum-pool"
path = "src/main.rs"
[dependencies]
kaspa-grpc-client = { path = "../vendor/igneum-node/rpc/grpc/client" }
kaspa-rpc-core = { path = "../vendor/igneum-node/rpc/core" }
kaspa-consensus-core = { path = "../vendor/igneum-node/consensus/core" }
kaspa-hashes = { path = "../vendor/igneum-node/crypto/hashes" }
kaspa-addresses = { path = "../vendor/igneum-node/crypto/addresses" }
kaspa-notify = { path = "../vendor/igneum-node/notify" }
kaspa-pow = { path = "../vendor/igneum-node/consensus/pow", features = ["igneum-pow"] }
igneum-pow = { path = "../igneum-pow" }
tokio = { version = "1.42", features = ["rt-multi-thread", "macros", "time", "net", "io-util", "sync", "signal", "fs"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
hex = "0.4"
rand = "0.8"
async-channel = "2"
k256 = { version = "0.13", features = ["ecdsa"] }
sha3 = "0.10"
alloy-consensus = { version = "2.5", default-features = false, features = ["k256", "std"] }
alloy-primitives = { version = "1.7", default-features = false, features = ["std", "k256", "rlp"] }
alloy-eips = { version = "2.5", default-features = false, features = ["std"] }
alloy-signer = { version = "2.5", default-features = false }
alloy-signer-local = { version = "2.5", default-features = false }
# TLS 1.3 on the member port (spec 9.3): rustls with ring, the tokio adapter, PEM reading, a self-signed pair on first start
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12", "logging"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] }
rustls-pki-types = { version = "1", features = ["std"] }
rcgen = { version = "0.13", default-features = false, features = ["ring", "pem"] }
[profile.release]
lto = "thin"
overflow-checks = true
# The share verifier fills a 256 MiB cache; unoptimised tests would take minutes
[profile.dev.package.igneum-pow]
opt-level = 3
[profile.dev.package.kaspa-pow]
opt-level = 2
[profile.dev.package.kaspa-consensus-core]
opt-level = 2
[profile.dev.package.kaspa-hashes]
opt-level = 2
[profile.dev.package.kaspa-math]
opt-level = 2
[profile.dev.package.blake2b_simd]
opt-level = 2