Floresta v0.5.1: Bugfixes & Minor Features
Floresta is a lightweight Bitcoin full node implementation written in Rust, powered by Utreexo, with an integrated Electrum Server.
- "This is a new release with a few bugfixes, as well some minor features. We invite everyone to test, report bugs and give feedbacks."
- Learn more about Floresta here.
What's new
- Allow to add manual connections to the node (#77 and #78): Now you can use the
addnodeRPC to manually connect with a given peer. - Socks5 Support (#76): Now we can connect with peers over multiple transports, including socks5. This allows running
florestadbehind a socks proxy like Tor. - Update a few RPCs to show more useful data (#82): Some RPCs like
getblockchaininfoandgetrawtransactiongot updated to return more useful data. They are now close to what Core returns in their respective RPC, but you shouldn't expect a 1-1 equivalence.getblockchaininfonow returns Utreexo-related data. - Add a ZMQ block notification (#93): Now you can subscribe over ZMQ to receive new blocks as they are accepted by our chainstate.
- Build and store BIP-158 Compact Block Filters (#89): We now create and store Compact Block Filters for easy wallet rescan and finding UTXOs inside the chain. Currently, we only build the filters and expose them over a new rpc
getfilter.- This implementation doesn't download the filters from p2p, we build them locally and let users pick what is stored, reducing disk usage. A multiphase approach where we use the p2p-provided ones to sync-up user's wallet during IBD and only store the locally computed ones should bring the best of both worlds.
- Don't die if we lose all Utreexo peers (#79): losing all utreexo peers may put our node in an undefined state, since we need those peers to get proofs. This PR hardens our node against it, and improves our recovery logic.
- Don't invalidate block if proof is invalid (#81): Since proofs aren't committed by PoW, a misbehaving peer might send an invalid proof without changing the block hash. Therefore, if we get an invalid proof, just ban this peer and try to get the proof from someone else.
- Refactor the node struct and rework trait bounds (#83):
UtreexoNodeis the biggest struct inside this codebase, and it's generic over many attributes. This PR is an attempt to simplify those bounds. Furthermore, making internal methods private. - improve Error enum names so we can remove clippy::enum_variant_name (#85): Some enum members ended with the enum's name (e.g.
SomethingError), this would trigger a clippy warning. This pr reworks invariant naming, so now we satisfy that linting. - Rework block notification (#92): Once
chainstatevalidates a new block, it sends that block to somesubscribers.- Before this PR, a subscriber would pass the
Senderend of a channel, and we would use this channel to send new blocks. The problem here is that some modules aren't services (i.e. they don't have an always running loop) and can't work with this channel model. - Now, anything implementing the
BlockConsumertrait may subscribe by passing anArc-ed instance of self tochainstate. - For modules using the old model, this pr implements a simple Single Producer, Single Consumer channel that implements
BlockConsumer.
- Before this PR, a subscriber would pass the
- Make database more robust (#95): Our default
chainstoredatabase had many issues with unclean shutdowns, leading to a broken state. This pr is another attempt to make our DB more robust against unexpected scenarios. - Make dockerfile build florestad (#96): After #58 our Dockerfile wasn't working. Now we keep official docker images on docker hub.