Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
485 commits
Select commit Hold shift + click to select a range
bef68fa
Merge pull request #304 from f321x/fix_doc_links
SomberNight Jun 17, 2025
be58fd8
cli: aggressively log version and "spesmilo" at startup
SomberNight Aug 1, 2025
a0ae4bc
fix: handle correctly the session limiting mechanism
alupov2061 Oct 3, 2025
fb28dc2
Merge pull request #312 from alupov2061/fix/incorrect-server-closing-…
SomberNight Oct 3, 2025
e891b55
add mempool.get_info, update relayfee comments
f321x Jun 16, 2025
d6f596a
banner: fix daemon version parsing
f321x Oct 23, 2025
8d83c0d
daemon: check daemon version on startup
f321x Oct 23, 2025
25001fd
v1.6: guard new methods behind 1.6 ptuple
f321x Oct 23, 2025
2c41a23
Merge pull request #302 from f321x/mempoolminfee
SomberNight Oct 23, 2025
6130956
Merge pull request #316 from f321x/check_daemon_version
SomberNight Oct 23, 2025
b9d5bd9
mempool.py: add a few type hints
SomberNight Oct 23, 2025
80fb748
session: broadcast_package: followup #288
f321x Oct 24, 2025
84c6627
session: estimatefee: normalize mode arg
f321x Oct 24, 2025
e1ec756
Merge pull request #320 from f321x/normalize_mode_estimatefee
SomberNight Oct 24, 2025
559211a
Merge pull request #319 from f321x/followup_288
SomberNight Oct 24, 2025
b5dac26
session.py: sanitize inputs for tx broadcast RPCs
SomberNight Oct 24, 2025
9f8593a
Merge pull request #321 from SomberNight/202510_session_sanitize_tx
SomberNight Oct 24, 2025
36af30a
session: fix ReplyAndDisconnect usage for DROP_CLIENT_UNKNOWN
SomberNight Oct 24, 2025
6bbd311
session: fix ReplyAndDisconnect. was broken for PaddedRSTransport
SomberNight Oct 24, 2025
f62f986
Merge pull request #322 from SomberNight/202510_fix_replydc
SomberNight Oct 24, 2025
735513f
add warmup budget to PaddedRSTransport
f321x Oct 27, 2025
592c4dc
Merge pull request #323 from f321x/warmup_budget
SomberNight Oct 27, 2025
03e7582
protocol change: server.version must be the first message on the wire
SomberNight Nov 5, 2020
fd67d0d
session: wait for protocol ver negotiation to finish before other reqs
SomberNight Jan 19, 2021
ed21d2a
docs: update to reflect removal of DROP_CLIENT_UNKNOWN envvar
SomberNight Oct 23, 2025
b2d6d04
session: 'server.version' must tolerate and ignore extra unknown args
SomberNight Oct 31, 2025
04d517a
Merge pull request #325 from SomberNight/202510_protocol_serverversion
SomberNight Oct 31, 2025
269f2e0
protocol change: define order of mempool txs in status of scripthash
SomberNight Dec 15, 2020
3d92d16
[AuxPow] Add Support for individual block headers instead of a combin…
ahmedbodi Jun 28, 2020
d088c3e
Array headers: Refactor AuxPoW
JeremyRand Mar 18, 2021
7f8f82f
Array headers: Refactor AuxPoW truncation
JeremyRand Mar 18, 2021
8b00d24
bump PROTOCOL_MAX to 1.6
SomberNight Nov 7, 2025
2fa0730
Merge branch '202510_protocol_1_6'
SomberNight Nov 7, 2025
132e750
try to raise `ulimit -n` open file limit automatically at startup
SomberNight Nov 9, 2025
7f6694d
Merge pull request #326 from SomberNight/202511_raise_ulimitn
SomberNight Nov 10, 2025
5599bc0
prepare release 1.19.0
SomberNight Nov 11, 2025
ae8b783
Merge pull request #327 from SomberNight/202511_release_1_19
SomberNight Nov 11, 2025
e65481c
lib/tx.py: fix wtxid calculation
SomberNight Nov 17, 2025
23ec2f3
lib/tx.py: fix vsize calculation
SomberNight Nov 17, 2025
65b93ec
tests: add more test txs for Bitcoin
SomberNight Nov 17, 2025
c5fb27e
Merge pull request #328 from SomberNight/202511_fix_libtx
SomberNight Nov 18, 2025
5b0c61b
coins: add additional default server
f321x Feb 17, 2026
ad1ee4b
Merge pull request #333 from f321x/add_server
f321x Feb 17, 2026
81f478b
chore(dockerfile): migrate from RocksDB to LevelDB, update to Python
ethicnology Mar 4, 2026
edeb997
coins: rm veruscoin, fix CI
f321x Mar 5, 2026
161dcce
Merge pull request #338 from f321x/rm_verus
SomberNight Mar 5, 2026
38d964c
refactor(dockerfile): remove rapidjson and leveldb extras, drop
ethicnology Mar 5, 2026
cbab5d7
Merge pull request #336 from ethicnology/master
f321x Mar 6, 2026
1093db7
don't get stuck during shutdown waiting for SessionManager to stop
SomberNight Mar 18, 2026
d455acd
Merge pull request #339 from SomberNight/202603_stuck_shutdown
SomberNight Mar 19, 2026
24865dc
readthedocs: update base image
SomberNight Mar 30, 2026
ab93c40
ci: move from Cirrus CI to Github Actions
f321x Apr 30, 2026
8504227
test_api: create new event loop
f321x Apr 30, 2026
66acbbf
DB storage: implement iterator.seek(key)
SomberNight Feb 3, 2021
9e223da
docs: remove coveralls links
f321x May 14, 2026
1ea1793
ci: re-add comment to build_docs task
SomberNight May 14, 2026
fa34e73
Merge pull request #340 from f321x/ci_github_actions
SomberNight May 14, 2026
c9b72e7
session: broadcast_package RPC: fix name of arg: tx_package->raw_txs
SomberNight May 28, 2026
c5bb861
startup logging: log both "max send" and "max recv" sizes
SomberNight May 28, 2026
4fb5d17
ci: pycodestyle: raise the max line limit
SomberNight May 29, 2026
9264b5e
coins: rm WIF_BYTE field
SomberNight May 29, 2026
eb43ee0
coins: rm XPUB_VERBYTES, XPRV_VERBYTES fields
SomberNight May 29, 2026
cd37398
(trivial) tx.py: add demarcation line - altcoin separator
SomberNight May 29, 2026
94319c3
coins: add explanation how base58 decoder is used
SomberNight May 29, 2026
f54c7ba
coins: rm HEADER_VALUES, HEADER_UNPACK fields
SomberNight May 29, 2026
32d7387
coins: rm more unused fields
SomberNight May 29, 2026
427dc65
Merge pull request #344 from SomberNight/202605_reduce_altcoin_burden
SomberNight May 29, 2026
cb672f6
deps: rm 'attrs', use stdlib dataclasses instead
SomberNight May 12, 2026
8854475
Merge pull request #345 from SomberNight/202605_rm_dep_attrs
SomberNight May 29, 2026
bbb3dc4
lrucache: sync with electrum client module (add type hints)
SomberNight May 12, 2026
dcc3669
Merge pull request #346 from SomberNight/202605_update_lrucache
SomberNight May 29, 2026
4dfa956
coins: refactor BitcoinMixin, so that it is not used by altcoins
SomberNight May 30, 2026
7817dc3
coins: refactor class hierarchy to fit actual Bitcoin better
SomberNight May 30, 2026
a9a66c5
coins: allow Coin.NET to be None, to indicate abstract class
SomberNight May 30, 2026
632d4a9
tests: add a block test for Bitcoin mainnet
SomberNight May 30, 2026
e8b244a
Merge pull request #348 from SomberNight/202605_coins_bitcoin
SomberNight May 30, 2026
c57f82c
replace unmaintained rocksdb bindings with f321x's fork
SomberNight May 29, 2026
61398d2
daemon: check "txindex" is enabled for bitcoind, error if missing
SomberNight May 7, 2026
4ca9bd5
Merge pull request #349 from SomberNight/202605_check_txindex
SomberNight May 30, 2026
e42feec
tests: storage: add testcase for exception during write_batch
SomberNight May 31, 2026
72cf376
coins: update TX_COUNT, TX_PER_BLOCK stats for mainnet/testnet3
SomberNight May 31, 2026
a96947a
coins: fix PEERS for Bitcoin
SomberNight May 31, 2026
c373f02
peer discovery: allow short chain splits
SomberNight May 31, 2026
801847f
Merge pull request #351 from SomberNight/202605_peer_discovery_testnet4
SomberNight May 31, 2026
5e20d0d
coins: update PEERS for testnet3 and testnet4
SomberNight May 31, 2026
b324119
env: will rm default DB_ENGINE=leveldb default in 2.0 release
SomberNight Jun 2, 2026
80c8be7
Merge pull request #347 from SomberNight/202605_rocksdb
SomberNight Jun 2, 2026
79c33ad
coins: add mutinynet signet
f321x Jun 3, 2026
ddf1a2e
Merge pull request #352 from f321x/mutinynet_2
SomberNight Jun 3, 2026
67f1c87
pyproject.toml: migrate to newer style "license" declaration
SomberNight Jun 3, 2026
f96b38a
Merge pull request #354 from SomberNight/202606_pyproject
SomberNight Jun 3, 2026
b7099db
prepare release 1.20.0
SomberNight Jun 3, 2026
ec1b548
Merge pull request #353 from SomberNight/202606_release_1_20
SomberNight Jun 3, 2026
9329738
README: be tiny bit less enthusiastic about running master before 2.0
SomberNight Jun 3, 2026
6c9460c
history db: change schema, and rm compaction
SomberNight Oct 22, 2020
c048f0a
history db: change schema: prefix entries with b'H'
SomberNight Oct 28, 2020
a54f0be
db: rm upgrade logic
SomberNight Oct 28, 2020
4ebf3d9
(trivial) make TXNUM_PADDING a global
SomberNight Oct 30, 2020
4c7607b
db: add parameter for TXOUTIDX_LEN
SomberNight Oct 30, 2020
d7f1df3
db: change TXOUTIDX_LEN from 4 to 3, to save db storage size
SomberNight Oct 30, 2020
5c44de4
(bugfix) db: change tx_num endianness (LE->BE) to match db comparator
SomberNight Nov 16, 2020
694685e
db: add (block_hash -> block_height) in-memory map
SomberNight May 7, 2026
8a07e55
session: implement "blockchain.outpoint.subscribe" RPC
SomberNight Nov 3, 2020
1ef6481
daemon: require "txospenderindex" for bitcoind, error if missing
SomberNight May 7, 2026
8b199bc
session: add "blockchain.scriptpubkey.*" RPCs
SomberNight Feb 26, 2025
05d200f
session: add 'block_hash' field to 'transaction.get_merkle'
SomberNight Feb 26, 2025
b301008
implement new "server.ping" semantics for protocol 1.7
SomberNight Feb 26, 2025
bea957c
session: add "bc.tx.testmempoolaccept" RPC
SomberNight May 4, 2026
77be9f9
session: add "mempool.recent" RPC
SomberNight Nov 17, 2025
0435738
introduce txid_rev, txid_hum terms; add type hints all over
SomberNight May 12, 2026
a663c6d
session: prefix protocol-handler method names with "phandle_"
SomberNight May 12, 2026
afa6eb3
db: clean-break lack-of-db-upgrade
SomberNight May 22, 2026
792780c
session: fixes for "server.ping", and use it to send some naive noise
SomberNight May 22, 2026
90fb3f0
session: use spec-1.7-defined RPC error code for "history too large"
SomberNight May 22, 2026
5e1ce53
bump version to 2.0b1
SomberNight May 22, 2026
04aee9e
session: bc.tx.get_merkle: don't include "block_hash" in resp
SomberNight May 22, 2026
cac79de
session: "server.features": omit "hash_function" for proto 1.7
SomberNight May 22, 2026
32c060a
calm pycodestyle
SomberNight May 22, 2026
f9241fc
session: "bc.outpoint.subscribe" RPC: rename height to funder_height
SomberNight May 23, 2026
ffe089c
session: "bc.outpoint.subscribe" RPC: make spk_hint arg mandatory
SomberNight May 26, 2026
79228c8
db: factor out {pack,unpack}_txoutidx
SomberNight May 28, 2026
792c851
db: factor out {pack,unpack}_satoshis_val
SomberNight May 28, 2026
d9ec7ab
db: factor out {pack,unpack}_block_height
SomberNight May 28, 2026
d92e218
db: factor out {pack,unpack}_dyn_header_offset
SomberNight May 28, 2026
01d481c
db: move pack/unpack serialization code into new db_util.py
SomberNight May 28, 2026
dba4580
db: unify everything to use big-endian encoding, not mixed
SomberNight May 28, 2026
f534365
db: fix silent hist_db corruption if we crash during double-reorg
SomberNight May 31, 2026
c923fda
env: rm DB_ENGINE default value
SomberNight Jun 3, 2026
1140b51
Merge pull request #303 from SomberNight/202502_protocol_1_6
SomberNight Jun 3, 2026
a5dde7b
rm plyvel from base install, extend release notes
SomberNight Jun 3, 2026
a1aa21a
Merge pull request #355 from SomberNight/202606_rm_plyvel
SomberNight Jun 3, 2026
122594c
sessions: _notify_inner: rename alias to scripthash
SomberNight Jun 4, 2026
f2f7316
session: mempool_txoutpoint_statuses: store dataclass instead of dict
SomberNight Jun 4, 2026
07dc760
lib/tx.py: TXOSpendStatus: rename prev_height to funder_height
SomberNight Jun 4, 2026
8ba533c
lib/tx.py: make TXOSpendStatus immutable
SomberNight Jun 4, 2026
eb9d709
Merge pull request #356 from SomberNight/202606_cleanup_notifs
SomberNight Jun 5, 2026
1c89398
session: fix regressed _calc_txoutpoint_status
SomberNight Jun 5, 2026
f48040e
session: run notify in session's taskgroup instead of manager's
SomberNight Jun 5, 2026
7084c21
session: better handle if bitcoind errors in _notify_inner
SomberNight Jun 5, 2026
d618a5f
Merge pull request #358 from SomberNight/202606_txo_notifs
SomberNight Jun 5, 2026
44af842
daemon: mention limitation of check_version and check_indexes
SomberNight Jun 5, 2026
427f658
session: rename _spender_for_txo
SomberNight Jun 7, 2026
fa5bc81
session: _calc_oc_txo_status: add reorg-paranoia
SomberNight Jun 7, 2026
e9c7c2e
session: add oc_txo_status_cache
SomberNight Jun 7, 2026
ffe592f
Merge pull request #359 from SomberNight/202606_txo_status_cache
SomberNight Jun 7, 2026
c7fd4fc
local rpc: reorganise cache statistics in getinfo
SomberNight Jun 7, 2026
7d273c9
local rpc: also show cache stats for estimatefee
SomberNight Jun 7, 2026
99386a3
session: add comment re txs_sent "double-counting"
SomberNight Jun 7, 2026
f8418f9
Merge pull request #360 from SomberNight/202606_getinfo_caches
SomberNight Jun 7, 2026
0b6eb80
local rpc: show cache hit rate (ratio) stat
SomberNight Jun 7, 2026
79e73f0
local rpc: new command: "inspect_session"
SomberNight Jun 8, 2026
278c62b
session: store longer client_name
SomberNight Jun 8, 2026
4aafc6d
Merge pull request #361 from SomberNight/202606_localrpc_inspect_session
SomberNight Jun 8, 2026
34d7111
mempool: trigger refresh after db_height changes, don't wait for poll
SomberNight Jun 18, 2026
b0d6764
Merge pull request #363 from SomberNight/202606_mempool_trigger
SomberNight Jun 18, 2026
74823ae
session: add "chaintip" field to protocol 1.7 responses
SomberNight Jun 16, 2026
de52da8
Merge pull request #362 from SomberNight/202606_protocol_1_7_chaintip
SomberNight Jun 18, 2026
0a22048
session: add comment re get_history race
SomberNight Jun 18, 2026
885980e
session: add more logging to retry_on_chain_sync_error
SomberNight Jun 18, 2026
1a093c6
prefetcher: trigger refresh after daemon height changes, don't wait f…
SomberNight Jun 18, 2026
d17cfa1
Merge pull request #364 from SomberNight/202606_prefetcher_trigger
SomberNight Jun 18, 2026
90d3b9a
bp,db,hist: add type hints
SomberNight Jun 20, 2026
6ed94a7
Merge pull request #366 from SomberNight/202606_db_type_hints
SomberNight Jun 21, 2026
b8e63d5
session: retry_on_chain_sync_error: allow daemon_height to differ
SomberNight Jun 20, 2026
0243eb0
db: BlockProcessor should not update db.bhash_to_bheight directly
SomberNight Jun 20, 2026
6c605f4
session: wrap more protocol handlers with retry_on_chain_sync_error
SomberNight Jun 20, 2026
1f3707d
session: retry_on_chain_sync_error: log time taken, add comments
SomberNight Jun 20, 2026
73ec60e
Merge pull request #367 from SomberNight/202606_rpc_response_consistency
SomberNight Jun 21, 2026
494163f
hist db: clear_excess: log progress
SomberNight Jun 22, 2026
55f6215
Merge pull request #368 from SomberNight/202606_hist_clear_excess_pro…
SomberNight Jun 22, 2026
434c9c3
init: log whether GIL is enabled
SomberNight Jun 22, 2026
fcdc956
json: replace unmaintained ujson/rapidjson extras with orjson
f321x Jun 25, 2026
87ae68b
Merge pull request #372 from f321x/3rd_party_json
SomberNight Jun 25, 2026
81b54f1
bp: add a few asserts, small comments for upcoming refactor for perf
SomberNight Jun 25, 2026
deefb15
bp: advance_txs: two loops for tx processing: (1) outputs, (2) inputs
SomberNight Jun 25, 2026
9f5c8d5
bp: advance_txs: pre-allocate undo_info
SomberNight Jun 25, 2026
d4383b5
bp: advance_txs: use threadpool for processing tx-inputs
SomberNight Jun 25, 2026
ffe663f
bp: check_and_advance_blocks: use threadpool for block-parsing
SomberNight Jun 25, 2026
960f3bb
bp: advance_txs: make process-tx-outputs less sequential
SomberNight Jun 25, 2026
357802f
bp: advance_txs: use threadpool for processing tx-outputs
SomberNight Jun 25, 2026
63b7284
bp: advance_txs: split into two functions: inputs and outputs
SomberNight Jun 25, 2026
22e5e0b
bp: change undo_infos to dict
SomberNight Jun 25, 2026
b2b8b10
bp: advance_blocks: separate loops for txouts and txins
SomberNight Jun 25, 2026
02092a9
bp: advance_blocks: use threadpool to proc multiple blocks concurrently
SomberNight Jun 25, 2026
6fc86b2
bp: two code paths, based on gil_enabled
SomberNight Jun 24, 2026
9f6c8a8
hist db: change "unflushed" to simple set
SomberNight Jun 24, 2026
7baf42f
bp: advance_blocks: parallelise history.add_unflushed() calls
SomberNight Jun 24, 2026
12d5d2a
bp: add comments re methods being thread-safe
SomberNight Jun 25, 2026
7f1d4f0
bp: LTORBlockProcessor: rm advance_txs
SomberNight Jun 25, 2026
52fcd5f
bp: maybe fix NameIndexBlockProcessor
SomberNight Jun 25, 2026
2083931
Merge pull request #369 from SomberNight/202606_bench1
SomberNight Jun 25, 2026
a54eb89
changelog: add section about performance improvements
SomberNight Jun 26, 2026
f35c0d7
update docs/PERFORMANCE-NOTES: rm stale mentions of json parsers
SomberNight Jun 26, 2026
8da652a
altcoin: verge: add peers (#365)
justinvforvendetta Jun 26, 2026
13b4971
util: rm custom cachedproperty, became part of stdlib in py 3.8
SomberNight Jun 26, 2026
7d97c9d
util: rm custom cachedproperty, became part of stdlib in py 3.8 (#373)
SomberNight Jun 26, 2026
eb72bf2
rm some old bsv propaganda :)
SomberNight Jun 27, 2026
08b6bbe
env: COIN no longer mandatory, defaults to "Bitcoin", again
SomberNight Jun 27, 2026
7dcfdcd
Merge pull request #374 from SomberNight/202606_env_coin
SomberNight Jun 27, 2026
e56b599
controller/bp: add more shutdown logging
SomberNight Jun 28, 2026
7eb81dc
db: db_flushed_event: fix thread-safety for asyncio.Event()
SomberNight Jun 28, 2026
2d574ae
Merge pull request #376 from SomberNight/202606_thread_mismatch
SomberNight Jun 28, 2026
6930108
mempool: comment how process_mempool works
SomberNight Jun 27, 2026
8879a7c
mempool: topologically sort candidate txs for accept_transactions
SomberNight Jun 27, 2026
db05ab6
mempool: simplify logic: rm "accept" part of fetch_and_accept
SomberNight Jun 27, 2026
55b9da2
mempool: type-hints: name utxo_map
SomberNight Jun 27, 2026
ee75ac8
type-hints: name TxOutpoint
SomberNight Jun 27, 2026
e1ccd4b
mempool: run accept_txs while-loop on separate thread
SomberNight Jun 27, 2026
2b4b79c
mempool: more comments for process_mempool
SomberNight Jun 27, 2026
7a39b8d
Merge pull request #375 from SomberNight/202606_mempool
SomberNight Jun 28, 2026
1bb64bb
db: during init, move long event-loop-blocking calls to other thread
SomberNight Jun 28, 2026
324050c
db: open_dbs: move long event-loop-blocking calls to other thread
SomberNight Jun 28, 2026
f58e687
storage: rocksdb: use close method from rocksdb-ng
SomberNight Jun 28, 2026
defb66c
tests: fix confusing comment
SomberNight Jun 28, 2026
29f54ba
Merge pull request #378 from SomberNight/202606_mempool2
SomberNight Jun 28, 2026
ead66dd
mempool: put more event-loop-blocking calls to other thread
SomberNight Jun 28, 2026
20e7079
tests: mempool: fix test_keep_synchronized: was racy/timing-dependent
SomberNight Jun 29, 2026
e497c4c
Merge pull request #379 from SomberNight/202606_mempool3
SomberNight Jun 29, 2026
c2d6c8d
fix DeprecationWarning: ssl.PROTOCOL_TLS
SomberNight Jun 28, 2026
3881df7
Merge pull request #377 from SomberNight/202606_ssl_deprecation
SomberNight Jun 29, 2026
7f6372d
mempool: call getrawmempool as soon as daemon's height changes
SomberNight Jun 29, 2026
59bcda0
Merge pull request #380 from SomberNight/202606_mempool4
SomberNight Jun 29, 2026
a1be0d5
storage: add some type hints
SomberNight Jun 29, 2026
18443f6
dedupe min python version
SomberNight Jun 29, 2026
9c8ff00
Merge pull request #381 from SomberNight/202606_storage_type_hints
SomberNight Jun 29, 2026
8c52c13
calm pycodestyle
SomberNight Jun 29, 2026
8e9c79b
Merge pull request #382 from SomberNight/202606_dedupe_min_py_version
SomberNight Jun 29, 2026
86a882b
db: clear_excess_undo_info: add logging and comment
SomberNight Jun 29, 2026
a284554
db: incrementally clear excess undo infos as we go
SomberNight Jun 29, 2026
9835ef9
tests: storage: add testcase for batch.delete
SomberNight Jun 29, 2026
b91a4fe
Merge pull request #383 from SomberNight/202606_clear_excess_undo_info
SomberNight Jun 29, 2026
f0df1ef
mempool: refresh_hashes: log time taken
SomberNight Jun 29, 2026
8d70103
util: add LogTimeTaken context manager, for benchmarking
SomberNight Jun 29, 2026
c8abdf6
mempool: log time taken for _update_histogram
SomberNight Jun 30, 2026
04d9875
Merge pull request #384 from SomberNight/202606_benchmark_mempool
SomberNight Jun 30, 2026
7fc4a81
mempool: partially revert threading _process_mempool
SomberNight Jun 30, 2026
6efe92a
Merge pull request #385 from SomberNight/202606_mempool5
SomberNight Jun 30, 2026
bc9ce8d
session: ChainSyncError: fix some stale comments
SomberNight Jul 1, 2026
be877be
session: protocol 1.7: revert including "chaintip" in responses
SomberNight Jul 1, 2026
42e9b38
Merge pull request #386 from SomberNight/202607_chainsyncerror
SomberNight Jul 1, 2026
7d10665
session: bump PROTOCOL_MAX to 1.7
SomberNight Jul 1, 2026
b8f6e22
Merge pull request #387 from SomberNight/202607_bump_protocol_max_1_7
SomberNight Jul 3, 2026
c2a5b36
contrib/Dockerfile: switch to rocksdb
SomberNight Jul 3, 2026
6cf5b61
contrib: add another Dockerfile, showing use w/ free-threaded python
SomberNight Jul 3, 2026
f2074c3
Merge pull request #388 from SomberNight/202607_dockerfile
SomberNight Jul 3, 2026
068c873
prepare release 2.0.0
SomberNight Jul 3, 2026
280cb33
Merge pull request #389 from SomberNight/202607_release_2_0
SomberNight Jul 3, 2026
9afddfe
coins: port the Doichain classes to ElectrumX 2.0
NiKrause Sep 16, 2026
3203ec9
Merge master into the 2.0 port
NiKrause Sep 16, 2026
3db7025
tests: add Doichain block fixtures
NiKrause Sep 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<!-- Note: Our primary focus is supporting Bitcoin, and contributions in that regard are appreciated the most!
Due to historical reasons, ElectrumX also has support for many altcoins. These will be kept as long as
maintenance burden can be kept *at a minimum*. When adding a new altcoin, (1) add a unit test (see tests/blocks),
and (2) make sure the CI tests pass. -->
108 changes: 108 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
name: CI

on:
push:
branches: [master]
pull_request:
branches: [master]
workflow_dispatch: # https://docs.github.com/en/actions/how-tos/manage-workflow-runs/manually-run-a-workflow

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
# if a PR gets force pushed, cancel the current run and run the new one
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
unittests:
name: unittests
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v6

- name: Install system packages
run: |
sudo apt-get -qq update
sudo apt-get install -yq libsnappy-dev zlib1g-dev libbz2-dev libgflags-dev liblz4-dev librocksdb-dev libleveldb-dev libboost-all-dev libsodium-dev

- uses: actions/setup-python@v6
with:
python-version: '3.14'
cache: 'pip'
cache-dependency-path: 'pyproject.toml'

- name: Log Python version and Git tag
run: |
python3 --version
git tag

- name: Install Python deps
run: |
# test framework -related deps
pip install pycodestyle
pip install pytest-asyncio
pip install pytest-cov
pip install Sphinx
# e-x itself
# - install both leveldb and rocksdb bindings
pip install ".[leveldb,rocksdb]"
# hashes and other altcoin-specific stuff
pip install tribushashm
pip install blake256
pip install dash_hash
pip install git+https://github.com/bitcoinplusorg/x13-hash
pip install xevan_hash
pip install quark_hash
pip install groestlcoin_hash
pip install x16r_hash
pip install pycryptodomex
pip install git+https://github.com/Electra-project/nist5_hash
pip install x16rv2_hash

- name: Run pytest
run: pytest --cov=electrumx

pycodestyle:
name: pycodestyle
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6

- uses: actions/setup-python@v6
with:
python-version: '3.14'
cache: 'pip'

- name: Install pycodestyle
run: pip install pycodestyle

- name: Run pycodestyle
run: |
pycodestyle \
--max-line-length=140 \
src

build_docs:
# note: this build task is not related to read-the-docs; it is only here to sanity-check the docs can be built.
# For the read-the-docs build, see .readthedocs.yml
# and the webhook set up in https://github.com/spesmilo/electrumx/settings/hooks
name: build_docs
runs-on: ubuntu-24.04
env:
LC_ALL: "C"
steps:
- uses: actions/checkout@v6

- uses: actions/setup-python@v6
with:
python-version: '3.14'
cache: 'pip'
cache-dependency-path: 'docs/requirements-docs.txt'

- name: Install docs deps
run: pip install -r docs/requirements-docs.txt

- name: Build docs
run: |
cd docs
make html
23 changes: 14 additions & 9 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
**/__pycache__/
.cache/
.pytest_cache/
/.cache/
/.pytest_cache/
*/*~
*.#*
*#
*~
docs/_build
/build
/dist
/electrumx.egg-info
.vscode/
.mypy_cache/
.idea/
/docs/_build/
/build/
/dist/
/venv/
/.vscode/
/.mypy_cache/
/.idea/

/src/electrumx.egg-info/
/src/e_x.egg-info/
/electrumx.egg-info/
/e_x.egg-info/
/certs
13 changes: 13 additions & 0 deletions .readthedocs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
version: 2

build:
os: ubuntu-24.04
tools:
python: "3.13"

sphinx:
configuration: docs/conf.py

python:
install:
- requirements: docs/requirements-docs.txt
53 changes: 0 additions & 53 deletions .travis.yml

This file was deleted.

3 changes: 2 additions & 1 deletion LICENCE
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
Copyright (c) 2016-2017, Neil Booth
Copyright (c) 2016-2020, Neil Booth
Copyright (c) 2020-2026, The Electrum developers

All rights reserved.

Expand Down
5 changes: 5 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# note: files listed in this file:
# - will be added to the sdist
# - but won't be added to the wheel (unless by other means)

graft tests/
31 changes: 31 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# ElectrumX - python electrum server

```
Licence: MIT
Original Author: Neil Booth
Current Maintainers: The Electrum developers
Language: Python (>= 3.10)
```

[![Latest PyPI package](https://badge.fury.io/py/e_x.svg)](https://pypi.org/project/e-x/)
[![Build Status](https://github.com/spesmilo/electrumx/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/spesmilo/electrumx/actions/workflows/ci.yml)

This project is a fork of [kyuupichan/electrumx](https://github.com/kyuupichan/electrumx).
The original author dropped support for Bitcoin, which we intend to keep.

ElectrumX allows users to run their own Electrum server. It connects to your
full node and indexes the blockchain, allowing efficient querying of the history of
arbitrary addresses. The server can be exposed publicly, and joined to the public network
of servers via peer discovery. As of May 2020, a significant chunk of the public
Electrum server network runs ElectrumX.

### Documentation

See [readthedocs](https://electrumx-spesmilo.readthedocs.io).

### Releases

Running from the latest git tag is always a safe bet, for which there are also releases on PyPI:
```
$ pip install e-x
```
22 changes: 0 additions & 22 deletions README.rst

This file was deleted.

3 changes: 3 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Security Policy

See https://github.com/spesmilo/electrum/blob/master/SECURITY.md
69 changes: 43 additions & 26 deletions contrib/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,35 +1,52 @@
# example of Dockerfile that builds release of electrumx-1.13.0
# ENV variables can be overrided on the `docker run` command

FROM ubuntu:18.04

WORKDIR /
ADD https://github.com/kyuupichan/electrumx/archive/1.13.0.tar.gz /
RUN tar zxvf *.tar.gz

RUN apt-get update && \
apt-get -y install python3.7 python3-pip librocksdb-dev libsnappy-dev libbz2-dev libz-dev liblz4-dev && \
pip3 install aiohttp pylru python-rocksdb

RUN cd /electrumx* && python3 setup.py install
# ElectrumX for Bitcoin, with RocksDB
# This is a simple ~minimal example Dockerfile.
#
# Build: docker build --pull -t electrumx .
# podman build --pull -t electrumx .
# Run: docker run -d --net=host -v ~/electrumx-db:/var/lib/electrumx -e DAEMON_URL="http://youruser:yourpass@localhost:8332" -e REPORT_SERVICES=tcp://example.com:50001 electrumx
# podman run -d --net=host -v ~/electrumx-db:/var/lib/electrumx -e DAEMON_URL="http://youruser:yourpass@localhost:8332" -e REPORT_SERVICES=tcp://example.com:50001 electrumx
# Stop: docker stop CONTAINER_ID
# podman stop CONTAINER_ID

FROM python:3.14-trixie AS builder

WORKDIR /usr/src/app

# Install the libs needed by rocksdb (including development headers)
RUN apt-get update \
&& apt-get -y --no-install-recommends install \
build-essential \
git \
librocksdb-dev \
pkg-config \
&& rm -rf /var/lib/apt/lists/*

# Install ElectrumX
ARG ELECTRUMX_VERSION=2.0.0
#ARG ELECTRUMX_VERSION=b8f6e227f251fe5cba96b940ffaa094439636417
RUN python -m venv venv \
&& venv/bin/pip install --no-cache-dir \
"e_x[rocksdb] @ git+https://github.com/spesmilo/electrumx.git@${ELECTRUMX_VERSION}"


FROM python:3.14-slim-trixie

# Install the libs needed by rocksdb (no development headers or statics)
RUN apt-get update && apt-get -y --no-install-recommends install librocksdb9.10 && rm -rf /var/lib/apt/lists/*

ENV SERVICES="tcp://:50001"
ENV COIN=BitcoinSV
ENV DB_DIRECTORY=/db
ENV COIN=Bitcoin
ENV DB_DIRECTORY=/var/lib/electrumx
ENV DAEMON_URL="http://username:password@hostname:port/"
ENV ALLOW_ROOT=true
ENV DB_ENGINE=rocksdb
ENV MAX_SEND=10000000
ENV BANDWIDTH_UNIT_COST=50000
ENV CACHE_MB=2000
#ENV CACHE_MB=2000

VOLUME /db
WORKDIR /usr/src/app
COPY --from=builder /usr/src/app .

RUN mkdir -p "$DB_DIRECTORY" && ulimit -n 1048576
VOLUME /var/lib/electrumx

CMD ["/usr/bin/python3", "/usr/local/bin/electrumx_server"]
RUN mkdir -p "$DB_DIRECTORY"

# build it with eg.: `docker build -t electrumx .`
# run it with eg.:
# `docker run -d --net=host -v /home/electrumx/db/:/db -e DAEMON_URL="http://youruser:yourpass@localhost:8332" -e REPORT_SERVICES=tcp://example.com:50001 electrumx`
# for a proper clean shutdown, send TERM signal to the running container eg.: `docker kill --signal="TERM" CONTAINER_ID`
CMD ["/usr/src/app/venv/bin/python", "/usr/src/app/venv/bin/electrumx_server"]
Loading