Releases: cculianu/Fulcrum
Fulcrum 1.2.7
What's new:
This a maintenance release of Fulcrum. It improves performance slightly for servers being hammered by Mist miners. It also contains a few under-the-hood features that will come in handy in the future.
- Optimized JSON parsing to shave more percentage points off CPU consumption when processing client requests (such as the numerous requests coming in from Mist miners).
- Optimized internal asynchronous message-passing in the app to be more performant. This helps to reduce load from Mist miner requests, and it should also be visible on initial synch as a 1%-5% reduction in initial synch time.
- bchd support is ready!
It still requiresUpdate: bchd v0.16.5 now supports persistent connections. Fulcrum and bchd are now 100% compatible with each other!bchd
implement persistent connections (#28 ) -- however that's in the works with thebchd
team and is in this PR in the bchd repo: gcash/bchd#384. If you want to use Fulcrum withbchd
-- you will need to build against that branch.. or wait until thebchd
team releases a version with that branch merged. (I have been runningbchd
from that branch against Fulcrum for days now and it works great!) - Fixed a minor bug where sometimes the
getinfo
admin RPC command would show a nonsensical value for"avg_fee_sats_B"
if the mempool was empty. Now it shows 0, as it should when there are 0 tx's! - Internal refactoring of code in some subsystems (such as hashing, bloom filtering, BitcoinD communication) to be more maintainable, easier to reason about, and also slightly faster.
Pre-compiled binaries for Linux
I have provided two pre-built binaries for Linux:
Fulcrum-1.2.7-x86_64-linux.tar.gz
, which is compiled on anUbuntu 18.04
system using Docker.Fulcrum-1.2.7-x86_64-linux-ub16.tar.gz
, which is compiled on a stockUbuntu 16.04
system (using Docker) but with g++ 7.3.0 installed from this ppa source:ppa:jonathonf/gcc-7.3
&ppa:jonathonf/gcc
Both of the above binaries contain Qt5Core
and Qt5Network
from Qt 5.14.2 statically linked. They still requires libz2
, libstd++
, and the right libc
version as dynamic libs on your system (but those are usually present if you are on a recent system).
If the first binary fails, try the second one (-ub16
), which should work on older systems, hopefully.
Pre-compiled binaries for Windows
Fulcrum-1.2.7-win64.zip
- Pre-built, statically linked Windows version.- It should "just work" on any Windows 7 or above 64-bit system.
- Includes is a statically-linked
Fulcrum.exe
, built withQt 5.14.2
andgcc 7.5.0
. - Additionally,
FulcrumAdmin.exe
is included which is the python script, but made into aonefile .exe
using PyInstaller.
See the .asc
files at the bottom for signatures; my gpg public key can be obtained here: https://github.com/Electron-Cash/keys-n-hashes/blob/master/pubkeys/calinkey.txt
Binary builds for macOS coming soon -- Until then you can always build from source!
Fulcrum 1.2.6
What's new:
This a bugfix release of Fulcrum. It is recommended that all admins upgrade to this version at their earliest convenience. Sorry for the quick release cycle. I hope this is the last one in a while!
Summary of changes:
- Bug fix - On BU nodes, if the node is still coming up while Fulcrum is already up, the "Connection: close" header was causing Fulcrum to panic. We instead now just warn in a 1-liner in the log if we see this unsupported header, rather than panic. Sorry about that. Thanks to @EchterAgo for reporting this
- Performance fix - The handling of Mist Miner hammering of the server has been optimized a bit to save on CPU cycles.
Pre-compiled binaries for Linux
I have provided two pre-built binaries for Linux:
Fulcrum-1.2.6-x86_64-linux.tar.gz
, which is compiled on anUbuntu 18.04
system using Docker.Fulcrum-1.2.6-x86_64-linux-ub16.tar.gz
, which is compiled on a stockUbuntu 16.04
system (using Docker) but with g++ 7.3.0 installed from this ppa source:ppa:jonathonf/gcc-7.3
&ppa:jonathonf/gcc
Both of the above binaries contain Qt5Core
and Qt5Network
from Qt 5.14.2 statically linked. They still requires libz2
, libstd++
, and the right libc
version as dynamic libs on your system (but those are usually present if you are on a recent system).
If the first binary fails, try the second one (-ub16
), which should work on older systems, hopefully.
Pre-compiled binaries for Windows
Fulcrum-1.2.6-win64.zip
- Pre-built, statically linked Windows version.- It should "just work" on any Windows 7 or above 64-bit system.
- Includes is a statically-linked
Fulcrum.exe
, built withQt 5.14.2
andgcc 7.5.0
. - Additionally,
FulcrumAdmin.exe
is included which is the python script, but made into aonefile .exe
using PyInstaller.
See the .asc
files at the bottom for signatures; my gpg public key can be obtained here: https://github.com/Electron-Cash/keys-n-hashes/blob/master/pubkeys/calinkey.txt
Binary builds for macOS coming soon -- Until then you can always build from source!
Fulcrum 1.2.5
What's new:
This a bugfix release of Fulcrum. It is recommended that all admins upgrade to this version at their earliest convenience.
Summary of changes:
- Bug fix - If the system locale was set to something that would format numbers with a comma
,
for decimal "points" (such asde_DE
), the JSON output of the application would be affected and would produce incorrect JSON.- This bug was introduced in Fulcrum v1.2.1 as a result of switching JSON serializer backends, but has now been fixed.
- Most of the external RPC calls don't output floats to clients, fortunately, so this bug was mostly visible only as a JSON bug in the
FulcrumAdmin
script. Thanks to Georg Englemann for finding this bug and reporting it!
- Bug fix: Added sending the
Host:
header to bitcoind. See issues: #27 & #28 - New - Fulcrum now supports non-RSA (in addition to the previous RSA) SSL private keys on an experimental basis. Keys types such as DSA, Elliptic Curve, and Diffie-Hellman should work, however they are not fully tested and there are limitations to which key formats the Qt QSsl socket layer supports. YMMV. Addresses #27 .
- Added code to intelligently suppress excess log output caused by Mist Miner clients. Your logs should no longer grow to 100's of megabytes per day with excess "Broadcast failed" messages.
- Compile fix for 32-bit platforms (not currently officially supported -- but theoretically should work).
- Misc. internal improvements and refactoring of the code.
Pre-compiled binaries for Linux
I have provided two pre-built binaries for Linux:
Fulcrum-1.2.5-x86_64-linux.tar.gz
, which is compiled on anUbuntu 18.04
system using Docker.Fulcrum-1.2.5-x86_64-linux-ub16.tar.gz
, which is compiled on a stockUbuntu 16.04
system (using Docker) but with g++ 7.3.0 installed from this ppa source:ppa:jonathonf/gcc-7.3
&ppa:jonathonf/gcc
Both of the above binaries contain Qt5Core
and Qt5Network
from Qt 5.14.2 statically linked. They still requires libz2
, libstd++
, and the right libc
version as dynamic libs on your system (but those are usually present if you are on a recent system).
If the first binary fails, try the second one (-ub16
), which should work on older systems, hopefully.
Pre-compiled binaries for Windows
Fulcrum-1.2.5-win64.zip
- Pre-built, statically linked Windows version.- It should "just work" on any Windows 7 or above 64-bit system.
- Includes is a statically-linked
Fulcrum.exe
, built withQt 5.14.2
andgcc 7.5.0
. - Additionally,
FulcrumAdmin.exe
is included which is the python script, but made into aonefile .exe
using PyInstaller.
See the .asc
files at the bottom for signatures; my gpg public key can be obtained here: https://github.com/Electron-Cash/keys-n-hashes/blob/master/pubkeys/calinkey.txt
Binary builds for macOS coming soon -- Until then you can always build from source!
Fulcrum 1.2.4
What's new:
This a maintenance release of Fulcrum. It refactors some of the code internally to be more correct and robust. No major changes observable from outside the application are included in this release, but I still recommend server admins run the latest.
Summary of changes:
- Refactored the internal hash table calculations to be more resilient against hash collisions. This should improve app performance in all circumstances. Starting with this version, we seed the hash table hasher functions with a cryptographically secure random number at app startup, and then we ensure that all data that ends up in a hash table is suitably hashed using MurMur3 or CityHash64. This fix should improve performance overall and make the app resilient to hash table collision attacks.
Pre-compiled binaries for Linux
I have provided two pre-built binaries for Linux:
Fulcrum-1.2.4-x86_64-linux.tar.gz
, which is compiled on anUbuntu 18.04
system using Docker.Fulcrum-1.2.4-x86_64-linux-ub16.tar.gz
, which is compiled on a stockUbuntu 16.04
system (using Docker) but with g++ 7.3.0 installed from this ppa source:ppa:jonathonf/gcc-7.3
&ppa:jonathonf/gcc
Both of the above binaries contain Qt5Core
and Qt5Network
from Qt 5.14.2 statically linked. They still requires libz2
, libstd++
, and the right libc
version as dynamic libs on your system (but those are usually present if you are on a recent system).
If the first binary fails, try the second one (-ub16
), which should work on older systems, hopefully.
Pre-compiled binaries for Windows
Fulcrum-1.2.4-win64.zip
- Pre-built, statically linked Windows version.- It should "just work" on any Windows 7 or above 64-bit system.
- Includes is a statically-linked
Fulcrum.exe
, built withQt 5.14.2
andgcc 7.5.0
. - Additionally,
FulcrumAdmin.exe
is included which is the python script, but made into aonefile .exe
using PyInstaller.
See the .asc
files at the bottom for signatures; my gpg public key can be obtained here: https://github.com/Electron-Cash/keys-n-hashes/blob/master/pubkeys/calinkey.txt
Binary builds for macOS coming soon -- Until then you can always build from source!
Fulcrum 1.2.3
What's new:
This is a maintenance release of Fulcrum. It contains a bug fix and some internal refactoring.
Summary of changes:
- Squashed a bug where if the number of transactions on the chain exceeded 4.29 billion, it might be possible to get data corruption in the database (CompactTXO numbers weren't being serialized to bytes correctly). There are currently ~290 million transactions on mainnet so this bug wouldn't have been triggered any time soon.
- Refactored the internal hash table calculations to be more correct.
Pre-compiled binaries for Linux
I have provided two pre-built binaries for Linux:
Fulcrum-1.2.3-x86_64-linux.tar.gz
, which is compiled on anUbuntu 18.04
system using Docker.Fulcrum-1.2.3-x86_64-linux-ub16.tar.gz
, which is compiled on a stockUbuntu 16.04
system (using Docker) but with g++ 7.3.0 installed from this ppa source:ppa:jonathonf/gcc-7.3
&ppa:jonathonf/gcc
Both of the above binaries contain Qt5Core
and Qt5Network
from Qt 5.14.2 statically linked. They still requires libz2
, libstd++
, and the right libc
version as dynamic libs on your system (but those are usually present if you are on a recent system).
If the first binary fails, try the second one (-ub16
), which should work on older systems, hopefully.
Pre-compiled binaries for Windows
Fulcrum-1.2.3-win64.zip
- Pre-built, statically linked Windows version.- It should "just work" on any Windows 7 or above 64-bit system.
- Includes is a statically-linked
Fulcrum.exe
, built withQt 5.14.2
andgcc 7.5.0
. - Additionally,
FulcrumAdmin.exe
is included which is the python script, but made into aonefile .exe
using PyInstaller.
See the .asc
files at the bottom for signatures; my gpg public key can be obtained here: https://github.com/Electron-Cash/keys-n-hashes/blob/master/pubkeys/calinkey.txt
Binary builds for macOS coming soon -- Until then you can always build from source!
Fulcrum 1.2.2
What's new:
This is a maintenance release of Fulcrum. It contains a performance optimization to JSON parsing as well as 1 fix to a (rare) bug seen in the wild on some systems.
Summary of changes:
- Squashed a bug where if the Qt library spuriously prints messages to the logger while the app is still being constructed, a null pointer dereference could occur, leading to a segfault. We now guard against this situation and take an alternate code path if a log message arrives during app construction. Special thanks to Chris Troutner for reporting this issue and helping to reproduce and fix it.
- Some code cleanup and a ~10% performance speedup to the JSON parser.
Pre-compiled binaries for Linux
I have provided two pre-built binaries for Linux:
Fulcrum-1.2.2-x86_64-linux.tar.gz
, which is compiled on anUbuntu 18.04
system using Docker.Fulcrum-1.2.2-x86_64-linux-ub16.tar.gz
, which is compiled on a stockUbuntu 16.04
system (using Docker) but with g++ 7.3.0 installed from this ppa source:ppa:jonathonf/gcc-7.3
&ppa:jonathonf/gcc
Both of the above binaries contain Qt5Core
and Qt5Network
from Qt 5.14.2 statically linked. They still requires libz2
, libstd++
, and the right libc
version as dynamic libs on your system (but those are usually present if you are on a recent system).
If the first binary fails, try the second one (-ub16
), which should work on older systems, hopefully.
Pre-compiled binaries for Windows
Fulcrum-1.2.2-win64.zip
- Pre-built, statically linked Windows version.- It should "just work" on any Windows 7 or above 64-bit system.
- Includes is a statically-linked
Fulcrum.exe
, built withQt 5.14.2
andgcc 7.5.0
. - Additionally,
FulcrumAdmin.exe
is included which is the python script, but made into aonefile .exe
using PyInstaller.
See the .asc
files at the bottom for signatures; my gpg public key can be obtained here: https://github.com/Electron-Cash/keys-n-hashes/blob/master/pubkeys/calinkey.txt
Binary builds for macOS coming soon -- Until then you can always build from source!
Fulcrum 1.2.1
What's new:
This is mostly a maintenance release that updated the codebase to compile cleanly against Qt 5.15.x and to also work-around some bugs in Qt 5.15.x. If you intend to use Fulcrum with Qt 5.15.x, then you should upgrade since Qt 5.15.x introduced several bugs that versions of Fulcrum prior to this one cannot cope with.
This version of Fulcrum should work perfectly as before on all supported Qt versions (5.12.5 and above).
Note that the released precompiled binaries were all statically linked to Qt 5.14.2, so Qt's 5.15.x bugs only affected people that compiled their own Fulcrum against Qt 5.15.x, such as Arch Linux users.
Summary of changes:
- Made the codebase compatible with the Qt 5.15.x series (as before, it still is backward compatible with Qt 5.12.5 or above).
- Replaced the Qt JSON serializer and deserializer with our own custom code for parsing/writing JSON.
- The motivation for this is because Qt recently replaced their JSON backend in 5.15.x and it has regressions in terms of correctness as well as performance.
- In addition, our custom serializer now has much more generous limitations on data size and JSON nesting level than we had in previous releases, when we were using Qt's
QJsonDocument
for serialization/deserialization.
- Added some benchmarks and tests to the codebase (only accessible if compiling with
-DENABLE_TESTS
). - Various bits of refactoring and code cleanup.
Pre-compiled binaries for Linux
I have provided two pre-built binaries for Linux:
Fulcrum-1.2.1-x86_64-linux.tar.gz
, which is compiled on anUbuntu 18.04
system using Docker.Fulcrum-1.2.1-x86_64-linux-ub16.tar.gz
, which is compiled on a stockUbuntu 16.04
system (using Docker) but with g++ 7.3.0 installed from this ppa source:ppa:jonathonf/gcc-7.3
&ppa:jonathonf/gcc
Both of the above binaries contain Qt5Core
and Qt5Network
from Qt 5.14.2 statically linked. They still requires libz2
, libstd++
, and the right libc
version as dynamic libs on your system (but those are usually present if you are on a recent system).
If the first binary fails, try the second one (-ub16
), which should work on older systems, hopefully.
Pre-compiled binaries for Windows
Fulcrum-1.2.1-win64.zip
- Pre-built, statically linked Windows version.- It should "just work" on any Windows 7 or above 64-bit system.
- Includes is a statically-linked
Fulcrum.exe
, built withQt 5.14.2
andgcc 7.5.0
. - Additionally,
FulcrumAdmin.exe
is included which is the python script, but made into aonefile .exe
using PyInstaller.
See the .asc
files at the bottom for signatures; my gpg public key can be obtained here: https://github.com/Electron-Cash/keys-n-hashes/blob/master/pubkeys/calinkey.txt
Binary builds for macOS coming soon -- Until then you can always build from source!
Fulcrum 1.2.0
What's new:
- Bugfix: CA-signed SSL certificates were not being recognized properly.
- CA-signed SSL certificates were not working as advertised previous to this release; now, they should work perfectly. Note that you need to give Fulcrum the full certificate chain, e.g.
fullchain.pem
if using CA-signed certificates. - Self-signed certificate functionality remains unchanged and works as before.
- Fortunately, all the Fulcrum servers were using self-signed certificates so this bug affected nobody, but it's good that it was fixed.
- Special thanks to @imaginaryusername for noticing this bug and reporting it, and helping to troubleshoot it.
- CA-signed SSL certificates were not working as advertised previous to this release; now, they should work perfectly. Note that you need to give Fulcrum the full certificate chain, e.g.
- New RPC Method:
blockchain.utxo.get_info
can be used to retrieve information (value, scripthash, confirmed_height) on an unspent output. This method can also be used as a quick test to see if a txo is spent or not. See the API docs for this new method here. - Updated the default server list seed file to contain a list of the latest, known-stable servers.
Pre-compiled binaries for Linux
I have provided two pre-built binaries for Linux:
Fulcrum-1.2.0-x86_64-linux.tar.gz
, which is compiled on anUbuntu 18.04
system using Docker.Fulcrum-1.2.0-x86_64-linux-ub16.tar.gz
, which is compiled on a stockUbuntu 16.04
system (using Docker) but with g++ 7.3.0 installed from this ppa source:ppa:jonathonf/gcc-7.3
&ppa:jonathonf/gcc
Both of the above binaries contain Qt5Core
and Qt5Network
from Qt 5.14.2 statically linked. They still requires libz2
, libstd++
, and the right libc
version as dynamic libs on your system (but those are usually present if you are on a recent system).
If the first binary fails, try the second one (-ub16
), which should work on older systems, hopefully.
Pre-compiled binaries for Windows
Fulcrum-1.2.0-win64.zip
- Pre-built, statically linked Windows version.- It should "just work" on any Windows 7 or above 64-bit system.
- Includes is a statically-linked
Fulcrum.exe
, built withQt 5.14.2
andgcc 7.5.0
. - Additionally,
FulcrumAdmin.exe
is included which is the python script, but made into aonefile .exe
using PyInstaller.
See the .asc
files at the bottom for signatures; my gpg public key can be obtained here: https://github.com/Electron-Cash/keys-n-hashes/blob/master/pubkeys/calinkey.txt
Binary builds for macOS coming soon -- Until then you can always build from source!
Fulcrum 1.1.1
What's new:
- The default output log format has changed slightly. We removed the
uptime
based timestamp (which wasn't very human friendly) and replaced it with alocaltime
timestamp of the form:[yyyy-MM-dd hh:mm:ss.zzz] <ThreadName> Log message...
.- Additionally a CLI arg
--ts-format
has been added to control the format of this log timestamp. (Also can be done via conf filets-format=
). See the CLI built-in help (-h
) for more details. - Syslog mode (
-S
) now defaults to not printing out any log timestamps (as if you had also passed--ts-format none
on the CLI). This default behavior can be controlled via--ts-format
as well.
- Additionally a CLI arg
- Fixed a typo in the example config file (thanks to @EchterAgo for spotting this typo).
- Internal changes (none of the below changes alter externally observable behavior of the app):
- Optimization: Shaved a few CPU cycles from code that does logging.
- Internal code refactoring of the socket server code.
- Various small internal optimizations and misc. refactoring
Pre-compiled binaries for Linux
I have provided two pre-built binaries for Linux:
Fulcrum-1.1.1-x86_64-linux.tar.gz
, which is compiled on anUbuntu 18.04
system using Docker.Fulcrum-1.1.1-x86_64-linux-ub16.tar.gz
, which is compiled on a stockUbuntu 16.04
system (using Docker) but with g++ 7.3.0 installed from this ppa source:ppa:jonathonf/gcc-7.3
&ppa:jonathonf/gcc
Both of the above binaries contain Qt5Core
and Qt5Network
from Qt 5.14.2 statically linked. They still requires libz2
, libstd++
, and the right libc
version as dynamic libs on your system (but those are usually present if you are on a recent system).
If the first binary fails, try the second one (-ub16
), which should work on older systems, hopefully.
Pre-compiled binaries for Windows
Fulcrum-1.1.1-win64.zip
- Pre-built, statically linked Windows version.- It should "just work" on any Windows 7 or above 64-bit system.
- Includes is a statically-linked
Fulcrum.exe
, built withQt 5.14.2
andgcc 7.5.0
. - Additionally,
FulcrumAdmin.exe
is included which is the python script, but made into aonefile .exe
using PyInstaller.
See the .asc
files at the bottom for signatures; my gpg public key can be obtained here: https://github.com/Electron-Cash/keys-n-hashes/blob/master/pubkeys/calinkey.txt
Binary builds for macOS coming soon -- Until then you can always build from source!
Fulcrum 1.1.0
What's new:
- Web Socket support has been added
- Fulcrum can now speak the Web Socket protocol! This facility is for extra compatibility. This allows Fulcrum to act as a useful blockchain server for web apps and/or JavaScript-based clients. Both
ws://
andwss://
are supported (wss
requires an SSL cert and key, of course -- if you already have an SSL port enabled, the same cert will be used forwss
). - Enable it in the config file with
ws=interface:port
(for ws://) andwss=interface:port
(for wss://), or from the CLI with-w
/-W
.
- Fulcrum can now speak the Web Socket protocol! This facility is for extra compatibility. This allows Fulcrum to act as a useful blockchain server for web apps and/or JavaScript-based clients. Both
- Two new advanced options were added to allow admins to tune/control rocksdb resource usage:
db_max_open_files
anddb_keep_log_file_num
. They are documented in the example config file bundled in the release archive. - Added some rocksdb statistics to the
getinfo
FulcrumAdmin call and even more rocksdb statistics to the/stats
endpoint. - Small performance improvement to the subscriptions notifier.
- Improvements to the socket code.
- Stricter enforcement of the per-IP connection limit (if the limit is hit, we now kick the client as early as possible in the connection pipeline rather than e.g. letting the SSL handshake proceed, only to kick after).
- Updated to use Qt 5.14.2.
- Fixups and improvements to build system (using Docker for static building of Window and Linux binaries).
Pre-compiled binaries for Linux
I have provided two pre-built binaries for Linux:
Fulcrum-1.1.0-x86_64-linux.tar.gz
, which is compiled on anUbuntu 18.04
system using Docker.Fulcrum-1.1.0-x86_64-linux-ub16.tar.gz
, which is compiled on a stockUbuntu 16.04
system (using Docker) but with g++ 7.3.0 installed from this ppa source:ppa:jonathonf/gcc-7.3
&ppa:jonathonf/gcc
Both of the above binaries contain Qt5Core
and Qt5Network
from Qt 5.14.2 statically linked. They still requires libz2
, libstd++
, and the right libc
version as dynamic libs on your system (but those are usually present if you are on a recent system).
If the first binary fails, try the second one (-ub16
), which should work on older systems, hopefully.
Pre-compiled binaries for Windows
Fulcrum-1.1.0-win64.zip
- Pre-built, statically linked Windows version.- It should "just work" on any Windows 7 or above 64-bit system.
- Includes is a statically-linked
Fulcrum.exe
, built withQt 5.14.2
andgcc 7.5.0
. - Additionally,
FulcrumAdmin.exe
is included which is the python script, but made into aonefile .exe
using PyInstaller.
See the .asc
files at the bottom for signatures; my gpg public key can be obtained here: https://github.com/Electron-Cash/keys-n-hashes/blob/master/pubkeys/calinkey.txt
Binary builds for macOS coming soon -- Until then you can always build from source!