22 releases
0.3.4 | Sep 26, 2024 |
---|---|
0.3.3 | Jul 16, 2024 |
0.3.2 | Jan 9, 2024 |
0.3.1 | Dec 25, 2023 |
0.1.0 | Mar 3, 2021 |
#15 in #identification
230 downloads per month
35KB
342 lines
Bitcoin Mining Pool Identification
This Rust crate implements a new PoolIdentification
trait on rust-bitcoin's
bitcoin::Transaction and bitcoin::Block structs. This trait can be used
for mining pool identification.
Methodology
There are generally two methods to identify mining pools based on the coinbase
transaction in a block. Firstly, miners often put a human readable (ASCII or
UTF-8) tag in the coinbase transaction. For example, a block mined by the Slush
mining pool might have /slush/
placed in the coinbase input's script sig.
Miners can be identified by mapping a tag found in the coinbase to the mining
pool identity. Secondly, mining pools often reuse the address where the coinbase
reward is paid to. These can be mapped to the pool identity too.
Both methods produce false negatives if a pool doesn't want to be identified. The coinbase tags are not authenticated. Pools can set a different coinbase tag (e.g. pool A mines his blocks with the coinbase tag of pool B). These would be picked up as false positives. It's however unlikely that a pool would pay the coinbase reward to an address he doesn't control, thus false positives are unlikely.
Implementation
The mapping of coinbase tags and mining pool addresses is based on data from
0xB10C/known-mining-pools which is a fork from btccom/Blockchain-Known-Pools
which in turn is a fork from blockchain/Blockchain-Known-Pools. These
projects provide a pools.json
file mapping coinbase tags and pool addresses to
pool identities.
The 0xB10C/known-mining-pools repository is included in this repository as
a Git submodule. The pools.json
file is used during the Rust build process to
generate the code mapping coinbase tags and addresses to pool identities. The
code generation can be found in build.rs
.
Development
The 0xB10C/known-mining-pools submodule can be initialized and updated with the following commands.
git submodule init
git submodule update
To pull changes from 0xB10C/known-mining-pools's master you need to cd known-mining-pools
and git pull
them there. These must be commited. Make sure the tests run!
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~9MB
~123K SLoC