Move changelog to separate file.
This commit is contained in:
parent
9eee1c815d
commit
c1bf4eb792
232
README.rst
232
README.rst
@ -13,233 +13,7 @@ For a future network with bigger blocks.
|
||||
:Language: Python (>= 3.6)
|
||||
:Author: Neil Booth
|
||||
|
||||
Getting Started
|
||||
===============
|
||||
Documentation
|
||||
=============
|
||||
|
||||
See `docs/HOWTO.rst`_.
|
||||
There is also an `installer`_ available that simplifies the installation on various Linux-based distributions.
|
||||
There is also an `Dockerfile`_ available .
|
||||
|
||||
.. _installer: https://github.com/bauerj/electrumx-installer
|
||||
|
||||
.. _Dockerfile: https://github.com/lukechilds/docker-electrumx
|
||||
|
||||
Features
|
||||
========
|
||||
|
||||
- Efficient, lightweight reimplementation of electrum-server
|
||||
- Fast synchronization of bitcoin mainnet from Genesis. Recent
|
||||
hardware should synchronize in well under 24 hours. The fastest
|
||||
time to height 448k (mid January 2017) reported is under 4h 30m. On
|
||||
the same hardware JElectrum would take around 4 days and
|
||||
electrum-server probably around 1 month.
|
||||
- The full current Electrum protocol is implemented.
|
||||
- Various configurable means of controlling resource consumption and
|
||||
handling denial of service attacks. These include maximum
|
||||
connection counts, subscription limits per-connection and across all
|
||||
connections, maximum response size, per-session bandwidth limits,
|
||||
and session timeouts.
|
||||
- Minimal resource usage once caught up and serving clients; tracking the
|
||||
transaction mempool appears to be the most expensive part.
|
||||
- Fully asynchronous processing of new blocks, mempool updates, and
|
||||
client requests. Busy clients should not noticeably impede other
|
||||
clients' requests and notifications, nor the processing of incoming
|
||||
blocks and mempool updates.
|
||||
- Daemon failover. More than one daemon can be specified, and
|
||||
ElectrumX will failover round-robin style if the current one fails
|
||||
for any reason.
|
||||
- Peer discovery protocol removes need for IRC
|
||||
- Coin abstraction makes compatible altcoin and testnet support easy.
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
ElectrumX does not do any pruning or throwing away of history. I want
|
||||
to retain this property for as long as it is feasible, and it appears
|
||||
efficiently achievable for the forseeable future with plain Python.
|
||||
|
||||
The following all play a part in making ElectrumX very efficient as a
|
||||
Python blockchain indexer:
|
||||
|
||||
- aggressive caching and batching of DB writes
|
||||
- more compact and efficient representation of UTXOs, address index,
|
||||
and history. Electrum Server stores full transaction hash and
|
||||
height for each UTXO, and does the same in its pruned history. In
|
||||
contrast ElectrumX just stores the transaction number in the linear
|
||||
history of transactions. For at least another 5 years this
|
||||
transaction number will fit in a 4-byte integer, and when necessary
|
||||
expanding to 5 or 6 bytes is trivial. ElectrumX can determine block
|
||||
height from a simple binary search of tx counts stored on disk.
|
||||
ElectrumX stores historical transaction hashes in a linear array on
|
||||
disk.
|
||||
- placing static append-only metadata indexable by position on disk
|
||||
rather than in levelDB. It would be nice to do this for histories
|
||||
but I cannot think of a way.
|
||||
- avoiding unnecessary or redundant computations, such as converting
|
||||
address hashes to human-readable ASCII strings with expensive bignum
|
||||
arithmetic, and then back again.
|
||||
- better choice of Python data structures giving lower memory usage as
|
||||
well as faster traversal
|
||||
- leveraging asyncio for asynchronous prefetch of blocks to mostly
|
||||
eliminate CPU idling. As a Python program ElectrumX is unavoidably
|
||||
single-threaded in its essence; we must keep that CPU core busy.
|
||||
|
||||
Python's ``asyncio`` means ElectrumX has no (direct) use for threads
|
||||
and associated complications.
|
||||
|
||||
|
||||
Roadmap
|
||||
=======
|
||||
|
||||
- offloading more work of wallet synchronization to the client
|
||||
- supporting better client privacy
|
||||
- wallet server engine
|
||||
- new features such as possibly adding label server functionality
|
||||
- potentially move some functionality to C or C++
|
||||
|
||||
|
||||
ChangeLog
|
||||
=========
|
||||
|
||||
IMPORTANT: version 1.2 changes script hash indexing in the database,
|
||||
so you will need to rebuild your databases from scratch. Running this
|
||||
version will refuse to open the DB and not corrupt it, so you can
|
||||
revert to 1.1.x if you wish. The initial synchronisation process
|
||||
should be around 10-15% faster than 1.1, owing to this change and
|
||||
Justin Arthur's optimisations from 1.1.1.
|
||||
|
||||
Version 1.2.1
|
||||
-------------
|
||||
|
||||
- remove IRC support. Most coins had empty IRC channels. Those that
|
||||
don't have peers populated.
|
||||
- use estimatesmartfee RPC call if available (SomberNight)
|
||||
- new/updated coins: Emercoin (Sergii Vakula), Bitcoin Gold (erasmospunk),
|
||||
Monacoin testnet (Wakiyama P), sibcoin (53r63rn4r), Komodo and Monaize
|
||||
(cipig), Hush (Duke Leto)
|
||||
- doc updates (fr3aker)
|
||||
- issues fixed: `#302`_
|
||||
|
||||
Version 1.2
|
||||
-----------
|
||||
|
||||
- separate P2PKH from P2PK entries in the history and UTXO databases.
|
||||
These were previously amalgamated by address as that is what
|
||||
electrum-server used to do. However Electrum didn't handle P2PK
|
||||
spends correctly and now the protocol admits subscriptions by script
|
||||
hash there is no need to have these merged any more.
|
||||
|
||||
For Bitcoin (BitcoinSegwit/mainnet) you can download a leveldb database
|
||||
synced up to block 490153 using this bittorrent magnet link (~24GB):
|
||||
magnet:?xt=urn:btih:caa804f48a319b061be3884ac011656c27121a6f&dn=electrumx_1.2_btc_leveldb_490153
|
||||
|
||||
Version 1.1.2
|
||||
-------------
|
||||
|
||||
- PEER_DISCOVERY environment variable is now tri-state (fixes
|
||||
`#287`_). Please check your setting as its meaning has changed
|
||||
slightly.
|
||||
- fix listunspent protocol methods to remove in-mempool spends (fixes
|
||||
`#277`_).
|
||||
- improved environment variable handling
|
||||
- EMC2 update (cipig), Monacoin update (cryptocoin-junkey),
|
||||
Canada Ecoin (koad)
|
||||
- typo fixes, Bitcoin testnet peers updates (SomberNight)
|
||||
|
||||
Version 1.1.1
|
||||
-------------
|
||||
|
||||
- various refactorings, improvement of env var handling
|
||||
- update docs to match
|
||||
- various optimizations mainly affecting initial sync (Justin Arthur)
|
||||
- Dash fixes (cipig)
|
||||
- Add ALLOW_ROOT option (Luke Childs)
|
||||
- Add BitZeny support, update Monacoin (cryptocoin-junkey)
|
||||
|
||||
Version 1.1
|
||||
-----------
|
||||
|
||||
See the changelogs below for recent changes. The most important is
|
||||
that for mainnet bitcoin **NET** must now be *mainnet* and you must
|
||||
choose a **COIN** from *BitcoinCash* and *BitcoinSegwit*. Similarly
|
||||
for testnets. These coins will likely diverge further in future so
|
||||
it's best they become separate coins now.
|
||||
|
||||
- no longer persist peers, rediscover on restart
|
||||
- onion peers only reported if can connect; hard-coded exception removed
|
||||
- small fix for blockchain.transaction.broadcast
|
||||
|
||||
Version 1.1pre2
|
||||
---------------
|
||||
|
||||
- peerdisc: handle protocol 1.1 server replies
|
||||
- issue `#251`_: fix protocol version reported in server.peers.subscribe
|
||||
- fix handling of failed transaction broadcast
|
||||
- fix typos (SomberNight)
|
||||
- doc and test updates
|
||||
- dash: return errors in JSON error field for protocol 1.1
|
||||
|
||||
Version 1.1pre1
|
||||
---------------
|
||||
|
||||
Many changes, mostly to prepare for support of Electrum protocol 1.1
|
||||
which the next Electrum client release will use.
|
||||
|
||||
*NOTE*: the **COIN** environment variable is now mandatory, and if you
|
||||
were running for any bitcoin flavour (Cash, Segwit, mainnet or
|
||||
testnet) you will need to update your **COIN** and **NET** environment
|
||||
variable settings as the old ones will no longer work.
|
||||
|
||||
- implement protocol version 1.1 and update protocol documentation
|
||||
- rework lib/coins.py for the various bitcoin flavours
|
||||
- show protocol version in "sessions" ElectrumX RPC call
|
||||
- permit **HOST** envvar to be a comma-separated list
|
||||
- daemon abstraction refactoring (erasmospunk)
|
||||
- permit alternative event loop policies (based on suggestion / work
|
||||
of JustinTArthur)
|
||||
- misc configuration updates (SubPar)
|
||||
- add Neblio support (neblioteam) and Bitbay (anoxxxy)
|
||||
- HOWTO.rst update for running on privileged port (EagleTM)
|
||||
- issues closed: exclude test dirs from installation (`#223`_).
|
||||
|
||||
Version 1.0.17
|
||||
--------------
|
||||
|
||||
- fix #227 introduced in 1.0.16
|
||||
|
||||
Version 1.0.16
|
||||
--------------
|
||||
|
||||
- updated server lists for post-fork. If you are on the Segwit chain
|
||||
you should have NET be "bitcoin-segwit", and if on the Bitcoin Cash chain
|
||||
continue to use "mainnet".
|
||||
- binding address fix for multi-homed machines (mmouse)
|
||||
- listen to IPv4 and IPv6 local interfaces
|
||||
- add Fujicoin (fujicoin), Crown (Extreemist), RegTest (RCasatta),
|
||||
Monacoin (cryptocoin-junkey)
|
||||
- bug fixes and updates (Kefkius, mmouse, thesamesam, cryptocoin-junkey,
|
||||
jtarthur)
|
||||
|
||||
Version 1.0.15
|
||||
--------------
|
||||
|
||||
- split server networks faster if a fork is detected
|
||||
- minor speedup
|
||||
- add Vertcoin support (erasmospunk)
|
||||
- update Faircoin (thokon00)
|
||||
|
||||
|
||||
**Neil Booth** kyuupichan@gmail.com https://github.com/kyuupichan
|
||||
|
||||
1BWwXJH3q6PRsizBkSGm2Uw4Sz1urZ5sCj
|
||||
|
||||
LKaFk4KkVpw9pYoUpbckQSKKgCVC4oj78b
|
||||
|
||||
.. _#223: https://github.com/kyuupichan/electrumx/issues/223
|
||||
.. _#251: https://github.com/kyuupichan/electrumx/issues/251
|
||||
.. _#277: https://github.com/kyuupichan/electrumx/issues/277
|
||||
.. _#287: https://github.com/kyuupichan/electrumx/issues/287
|
||||
.. _#302: https://github.com/kyuupichan/electrumx/issues/287
|
||||
.. _docs/HOWTO.rst: https://github.com/kyuupichan/electrumx/blob/master/docs/HOWTO.rst
|
||||
.. _docs/ENVIRONMENT.rst: https://github.com/kyuupichan/electrumx/blob/master/docs/ENVIRONMENT.rst
|
||||
.. _docs/PROTOCOL.rst: https://github.com/kyuupichan/electrumx/blob/master/docs/PROTOCOL.rst
|
||||
See `readthedocs <https://electrumx.readthedocs.io/>`_.
|
||||
|
||||
142
docs/changelog.rst
Normal file
142
docs/changelog.rst
Normal file
@ -0,0 +1,142 @@
|
||||
ChangeLog
|
||||
=========
|
||||
|
||||
IMPORTANT: version 1.2 changes script hash indexing in the database,
|
||||
so you will need to rebuild your databases from scratch. Running this
|
||||
version will refuse to open the DB and not corrupt it, so you can
|
||||
revert to 1.1.x if you wish. The initial synchronisation process
|
||||
should be around 10-15% faster than 1.1, owing to this change and
|
||||
Justin Arthur's optimisations from 1.1.1.
|
||||
|
||||
Version 1.2.1
|
||||
-------------
|
||||
|
||||
- remove IRC support. Most coins had empty IRC channels. Those that
|
||||
don't have peers populated.
|
||||
- use estimatesmartfee RPC call if available (SomberNight)
|
||||
- new/updated coins: Emercoin (Sergii Vakula), Bitcoin Gold (erasmospunk),
|
||||
Monacoin testnet (Wakiyama P), sibcoin (53r63rn4r), Komodo and Monaize
|
||||
(cipig), Hush (Duke Leto)
|
||||
- doc updates (fr3aker)
|
||||
- issues fixed: `#302`_
|
||||
|
||||
Version 1.2
|
||||
-----------
|
||||
|
||||
- separate P2PKH from P2PK entries in the history and UTXO databases.
|
||||
These were previously amalgamated by address as that is what
|
||||
electrum-server used to do. However Electrum didn't handle P2PK
|
||||
spends correctly and now the protocol admits subscriptions by script
|
||||
hash there is no need to have these merged any more.
|
||||
|
||||
For Bitcoin (BitcoinSegwit/mainnet) you can download a leveldb database
|
||||
synced up to block 490153 using this bittorrent magnet
|
||||
`link (~24GB) <magnet:?xt=urn:btih:caa804f48a319b061be3884ac011656c27121a6f&dn=electrumx_1.2_btc_leveldb_490153>`_.
|
||||
|
||||
Version 1.1.2
|
||||
-------------
|
||||
|
||||
- PEER_DISCOVERY environment variable is now tri-state (fixes
|
||||
`#287`_). Please check your setting as its meaning has changed
|
||||
slightly.
|
||||
- fix listunspent protocol methods to remove in-mempool spends (fixes
|
||||
`#277`_).
|
||||
- improved environment variable handling
|
||||
- EMC2 update (cipig), Monacoin update (cryptocoin-junkey),
|
||||
Canada Ecoin (koad)
|
||||
- typo fixes, Bitcoin testnet peers updates (SomberNight)
|
||||
|
||||
Version 1.1.1
|
||||
-------------
|
||||
|
||||
- various refactorings, improvement of env var handling
|
||||
- update docs to match
|
||||
- various optimizations mainly affecting initial sync (Justin Arthur)
|
||||
- Dash fixes (cipig)
|
||||
- Add ALLOW_ROOT option (Luke Childs)
|
||||
- Add BitZeny support, update Monacoin (cryptocoin-junkey)
|
||||
|
||||
Version 1.1
|
||||
-----------
|
||||
|
||||
See the changelogs below for recent changes. The most important is
|
||||
that for mainnet bitcoin **NET** must now be *mainnet* and you must
|
||||
choose a **COIN** from *BitcoinCash* and *BitcoinSegwit*. Similarly
|
||||
for testnets. These coins will likely diverge further in future so
|
||||
it's best they become separate coins now.
|
||||
|
||||
- no longer persist peers, rediscover on restart
|
||||
- onion peers only reported if can connect; hard-coded exception removed
|
||||
- small fix for blockchain.transaction.broadcast
|
||||
|
||||
Version 1.1pre2
|
||||
---------------
|
||||
|
||||
- peerdisc: handle protocol 1.1 server replies
|
||||
- issue `#251`_: fix protocol version reported in server.peers.subscribe
|
||||
- fix handling of failed transaction broadcast
|
||||
- fix typos (SomberNight)
|
||||
- doc and test updates
|
||||
- dash: return errors in JSON error field for protocol 1.1
|
||||
|
||||
Version 1.1pre1
|
||||
---------------
|
||||
|
||||
Many changes, mostly to prepare for support of Electrum protocol 1.1
|
||||
which the next Electrum client release will use.
|
||||
|
||||
*NOTE*: the **COIN** environment variable is now mandatory, and if you
|
||||
were running for any bitcoin flavour (Cash, Segwit, mainnet or
|
||||
testnet) you will need to update your **COIN** and **NET** environment
|
||||
variable settings as the old ones will no longer work.
|
||||
|
||||
- implement protocol version 1.1 and update protocol documentation
|
||||
- rework lib/coins.py for the various bitcoin flavours
|
||||
- show protocol version in "sessions" ElectrumX RPC call
|
||||
- permit **HOST** envvar to be a comma-separated list
|
||||
- daemon abstraction refactoring (erasmospunk)
|
||||
- permit alternative event loop policies (based on suggestion / work
|
||||
of JustinTArthur)
|
||||
- misc configuration updates (SubPar)
|
||||
- add Neblio support (neblioteam) and Bitbay (anoxxxy)
|
||||
- HOWTO.rst update for running on privileged port (EagleTM)
|
||||
- issues closed: exclude test dirs from installation (`#223`_).
|
||||
|
||||
Version 1.0.17
|
||||
--------------
|
||||
|
||||
- fix #227 introduced in 1.0.16
|
||||
|
||||
Version 1.0.16
|
||||
--------------
|
||||
|
||||
- updated server lists for post-fork. If you are on the Segwit chain
|
||||
you should have NET be "bitcoin-segwit", and if on the Bitcoin Cash chain
|
||||
continue to use "mainnet".
|
||||
- binding address fix for multi-homed machines (mmouse)
|
||||
- listen to IPv4 and IPv6 local interfaces
|
||||
- add Fujicoin (fujicoin), Crown (Extreemist), RegTest (RCasatta),
|
||||
Monacoin (cryptocoin-junkey)
|
||||
- bug fixes and updates (Kefkius, mmouse, thesamesam, cryptocoin-junkey,
|
||||
jtarthur)
|
||||
|
||||
Version 1.0.15
|
||||
--------------
|
||||
|
||||
- split server networks faster if a fork is detected
|
||||
- minor speedup
|
||||
- add Vertcoin support (erasmospunk)
|
||||
- update Faircoin (thokon00)
|
||||
|
||||
|
||||
**Neil Booth** kyuupichan@gmail.com https://github.com/kyuupichan
|
||||
|
||||
1BWwXJH3q6PRsizBkSGm2Uw4Sz1urZ5sCj
|
||||
|
||||
LKaFk4KkVpw9pYoUpbckQSKKgCVC4oj78b
|
||||
|
||||
.. _#223: https://github.com/kyuupichan/electrumx/issues/223
|
||||
.. _#251: https://github.com/kyuupichan/electrumx/issues/251
|
||||
.. _#277: https://github.com/kyuupichan/electrumx/issues/277
|
||||
.. _#287: https://github.com/kyuupichan/electrumx/issues/287
|
||||
.. _#302: https://github.com/kyuupichan/electrumx/issues/287
|
||||
@ -24,3 +24,48 @@ Features
|
||||
for any reason.
|
||||
- Peer discovery protocol removes need for IRC
|
||||
- Coin abstraction makes compatible altcoin and testnet support easy.
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
ElectrumX does not do any pruning or throwing away of history. I want
|
||||
to retain this property for as long as it is feasible, and it appears
|
||||
efficiently achievable for the forseeable future with plain Python.
|
||||
|
||||
The following all play a part in making ElectrumX very efficient as a
|
||||
Python blockchain indexer:
|
||||
|
||||
- aggressive caching and batching of DB writes
|
||||
- more compact and efficient representation of UTXOs, address index,
|
||||
and history. Electrum Server stores full transaction hash and
|
||||
height for each UTXO, and does the same in its pruned history. In
|
||||
contrast ElectrumX just stores the transaction number in the linear
|
||||
history of transactions. For at least another 5 years this
|
||||
transaction number will fit in a 4-byte integer, and when necessary
|
||||
expanding to 5 or 6 bytes is trivial. ElectrumX can determine block
|
||||
height from a simple binary search of tx counts stored on disk.
|
||||
ElectrumX stores historical transaction hashes in a linear array on
|
||||
disk.
|
||||
- placing static append-only metadata indexable by position on disk
|
||||
rather than in levelDB. It would be nice to do this for histories
|
||||
but I cannot think of a way.
|
||||
- avoiding unnecessary or redundant computations, such as converting
|
||||
address hashes to human-readable ASCII strings with expensive bignum
|
||||
arithmetic, and then back again.
|
||||
- better choice of Python data structures giving lower memory usage as
|
||||
well as faster traversal
|
||||
- leveraging asyncio for asynchronous prefetch of blocks to mostly
|
||||
eliminate CPU idling. As a Python program ElectrumX is unavoidably
|
||||
single-threaded in its essence; we must keep that CPU core busy.
|
||||
|
||||
Python's :mod:`asyncio` means ElectrumX has no (direct) use for threads
|
||||
and associated complications.
|
||||
|
||||
Roadmap
|
||||
=======
|
||||
|
||||
- offloading more work of wallet synchronization to the client
|
||||
- supporting better client privacy
|
||||
- wallet server engine
|
||||
- new features such as possibly adding label server functionality
|
||||
- potentially move some functionality to C or C++
|
||||
|
||||
@ -30,6 +30,7 @@ available .
|
||||
.. toctree::
|
||||
|
||||
features
|
||||
changelog
|
||||
HOWTO
|
||||
ENVIRONMENT
|
||||
PROTOCOL
|
||||
|
||||
Loading…
Reference in New Issue
Block a user