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
addnode
RPC to manually connect with a given peer. - Socks5 Support (#76): Now we can connect with peers over multiple transports, including socks5. This allows running
florestad
behind a socks proxy like Tor. - Update a few RPCs to show more useful data (#82): Some RPCs like
getblockchaininfo
andgetrawtransaction
got 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.getblockchaininfo
now 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):
UtreexoNode
is 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
chainstate
validates a new block, it sends that block to somesubscribers
.- Before this PR, a subscriber would pass the
Sender
end 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
BlockConsumer
trait 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
chainstore
database 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.