+
Skip to content

Releases: vinteumorg/Floresta

Floresta v0.8.0

14 Jul 16:49
f1b61ff
Compare
Choose a tag to compare

Notable changes

This release comes with support for BIP-0324 (P2P V2) and BIP-0094 (testnet4). Starts our saga to implement a Bitcoin Core-equivalent JSON-RPC, to help integrations. We've improved our testing infrastructure, with functional and integration tests as well as fuzzing. We've also added support for DNS-over-HTTPS if we are using a proxy, improving our privacy by not leaking to our ISP that we are using Bitcoin. There was several improvements on our documentation, including an MD book, manpages and module-level documentation. Finally, we add a support for Prometheus, so you can monitor your node and the Bitcoin Network with metrics straight from your node.

New Features and notable changes

  • #306 adds a new clean-data just recipe that will delete test-generated data. This is useful for developers that needs to run all tests during development.
  • #319 adds support to Prometheus, a metrics protocol to expose useful data about florestad. We have a sample docker-compose that start florestad, a Prometheus server and Graphana. #372 Adds more metrics like average block processing times and message latency.
  • #319 introduced a pre-contributing just recipe that will run something akin to CI. It is intended to be used before pushing some commits, to make sure it will pass.
  • #309, #329, #340, #398, #401, #402, #452 improves our python test framework, and adds integration tests for several RPCs. The goal is to make sure our RPCs are API-compatible with Bitcoin Core. We aim at API-compatibility to allow users to replace Core with Floresta, without changing their applications.
  • #320 adds a script that calls cargo test, on all features combinations. It is built with cargo-hack, a tool to permutate all features combinations in a crate. This script is also called on CI to make sure Floresta works on any feature combination. #437 uses the same logic for clippy as well.
  • #323, #336 starts splitting our JSON-RPC server implementation, following core's documentation categories. This will make implementation easier to read, as each category is implemented in one file.
  • #331 integrates the functional tests with the justfile and nix to make running them easier.
  • #349 added issue/PR templates to better organize our repository.
  • #351 added CONTRIBUTING.md to outline our conventions, and assist new developers that wishes to contribute with Floresta.
  • #356 adds a sample systemd service that can be used by users and distributions to run Floresta as a system package.
  • #353 adds the fuzz targets to CI-CD, so we make sure we won't unadiverntly break it. #432 uses corpora data to call our fuzzing using already initialized corpus data.
  • #346 creates some very basic mempool stuff. We now have the machinery for accepting transactions, keeping mempool proofs, and removing transactions after they are mined. We don't have transaction relay or actual validation of transactions yet.
  • #380 links to floresta-docs, a md-book that explains the inners of Floresta for developers that wants to get more information about the code architecture.
  • #385 added the benchmark workflow in CI. We run it on CI to make it will build properly after that change.
  • #384 adds some coinbase-specific checks, like whether it has one input and if the script has valid amounts.
  • #395 simplifies how we represent errors in floresta-chain.
  • #387 adds functional tests for oversized scripts, making sure we won't accept any malformed script.
  • #405 introduces a new way to express hash literals (like block hashes) by adding a proc-macro that parses it at compile-time. This makes sure that we find invalid hashes before even running the test.
  • #373 adds support for BIP324 "P2PV2" to Floresta. This is the new encrypted transport protocol for the P2P layer, and was integrated using the rust-bip324 library.
  • #383 improves our connection and requests logic to make sure Floresta can make progress and keep up with the network.
  • #408 returns the txid for script validation errors, and simplifies it. Knowing which tx was invalidated is useful for understanding why a block is invalid.
  • #399 and #412 improves the node handle, making it more reliable.
  • #376, #430, #447, #446, #433, #460 and #484 improves our module-level documentation.
  • #407 adds listdescriptors RPC that returns all descriptors we had previously added to our watch-only wallet.
  • #414 does the same as #405 but for utreexo accumulator hashes.
  • #215 implements the backfill feature. This works similarly to Bitcoin Core's assumeutreexo behaviour. If you use the --assume-utreexo CLI option (on by default), your node will start validating historic blocks on background. You can disable it with --no-backfill.
  • #417 improves the process_proof function, and adds tests to it.
  • #422 added functional tests to the SSL/TLS implementation of our Electrum Server.
  • #419 is a follow-up for #373, which adds the protocol version to the CLI getpeerinfo and logs.
  • #425 added a cli-option to generate a self-signed certificate to use with your Electrum Server.
  • #440 creates a UtxoData struct with all the context needed to validate a UTXO. Then checks for coinbase maturity using the creation height. #444 adds some sample data for chain-state tests. #457 added tests for coinbase maturity.
  • #429 moves most of our documentation to a doc folder, making our README more succinct.
  • #455 adds the option to change which version of utreexod and bitcoind you'll use in your tests. This will be useful to make sure we keep compatibility with all the maintained version of such daemons.
  • #436 added more nix flake development tools and checks.
  • #468 simplifies scriptpubkey reconstruction and improves naming.
  • #462 and #507 improves our DNS seeds, by making the request async and allowing using DoH if --proxy is provided, for better privacy.
  • #471 removes unwraps and better handles errors for ChainStateBuilder.
  • #473 removes an internal Network enum we had, and use bitcoin::Network instead. This avoids duplication.
  • #476 adds debug data with assert, to help debugging test failures.
  • #469 improves just recipes for better integration with functional tests.
  • #478 denies unwraps in floresta-chain. We should let consumers figure out what to do after an error, instead of just panic-ing. If we can prove that an error would never happen, we should use expect with an appropriate error message.
  • #481 adds the two BIP30 violations in a deny list. Therefore, if we ever see them, we can reject the transaction.
  • #482 creates a just open-doc command that opens our cargo docs with your default browser.
  • #251 adds a new optimized chainstore to foresta-chain. This sped-up header-sync time, reduced heap-usage and memory allocations. #493 improves it by applying some optimizations. #479 adds corruption detection.
  • #491 adds a fuzz target for addrman.
  • #472 add the blockhash argument to gettxoutproof, making it Bitcoin Core-compatile.
  • #490 adds Bitcoin Core to integration tests, along with utreexod.
  • #495 improves the main floresta-chain traits, grouping them in some common ways to avoid overly-complex bounds for consumers.
  • #465 makes the addnode RPC compatible with Bitcoin Core.
  • #494 adds support for BIP-0094 (testnet4).
  • #509 adds the ping RPC command.
  • #501 makes floresta-wire prefer V2 connections by default.
  • #515 allow users to select which functional test they want to run, by name or pattern.
  • #519 uses FlatChainStore as default in tests.
  • #520, #517, #532 fixes and tests some RPCs to make sure they are core-compatible.
  • #532 further simplifies the FlatChainStore.
  • #527 makes the FlatChainStore the default for florestad.
  • #535 adds support for tokio-subscriber, used by tokio-console.
  • #523 uses unique ports for the Electrum Server.
  • #539 improves leaf reconstruction error handling.
  • #556 renames rescan to rescanblockchain, which is how core calls it.
  • #521 adds template to RPC commands documentation and adds tooling to build manpages out of our documentation.

Bugfixes and documentation changes

  • Fix mismatch between floresta-cli command and florestad server. (#303)
  • Add comments to explain RPC client code. (#302)
  • Fix all typos. (#313)
  • Update node.rs. (#317)
  • Update lib.rs for floresta-watch-only-wallet. (#315)
  • Update lib.rs. (#316)
  • Update florestad.rs. (#318)
  • Add English translation of tutorial documentation. (#321)
  • json-rpc: use axum for server. (#322)
  • Update florestad.rs. (#325)
  • Update cli.rs. (#324)
  • [Docs] More docs to sync_node.rs. (#310)
  • [Fix] Add names for UtreexoNode fields. (#312)
  • Improving Peer Connection Shutdown Handling. (#327)
  • dnsseed: add a new seed that supports utreexo. (#330)
  • Bump back nix building to 23.11 and remove bitcoin fork. (#334)
  • Return tx validation errors, fix max script size. (#311)
  • Remove mock rpc from functional tests. (#337)
  • Move block weight check to validate_block_no_acc. (#339)
  • chore: add new utreexo seed [seed.bitcoin.luisschwab.com]. (#343)
  • fix,log: remove unresponsive peers, better DNS logging. (#344)
  • fix: build floresta-cli instead of floresta_cli. (#345)
  • ci: use 'published' event for triggering docker.yml workflow. (#347)
  • Fix release and PGP maintainer links in README and CONTRIBUTING. (#355)
  • fix(florestad): don't panic if a lock cannot be obtained to the datadir, RPC and Electrum ports. (#365)
  • doc: make template more concise, add ref to CONTRIBUTING.md on template. (#357)
  • Remove unused cfg attributes. (#361)
  • code quality- Fixing serde clippy warning. (#367)
  • code quality:Fix code simplification clippy warnings. (#371)
  • doc: add floresta-cli PATH installation command to README. (#377)
  • Refactor consensus.rs error mapping. (#382)
  • [Code-quality]: removed few dependencies that are not be...
Read more

Floresta v0.7.0

04 Dec 15:37
6615959
Compare
Choose a tag to compare

Notable changes and new features

  • Async-std To Tokio (#172): This ends a major milestone of replacing async-std with tokio as the async runtime, given that the former isn't well maintained and lacks features like work stealing and doesn't have as much tooling as the latter. This project was part of 2024 Summer Of Bitcoin intership.
  • florestad: expose assumeutreexo in lib mode (#211): If you are using florestad as a lib, you can pass the assumeutreexo values yourself, so your application is the source of truth for this. Another useful use-case would be to start a mobile florestad from an already-running instance somewhere else, by scanning a QR code with the assumeutreexo values, so the process is still trustless, you're just skipping redundant work.
  • Feature: daemonize (#225): On *NIX enviremonets, you may want florestad to run in the background as a daemon. This PR adds a clean way of doing this, by adding a --daemon option that daemonizes florestad right after we parse configuration related data.
  • Wire: handle block filters out-of-order (#226): Before that, we would assume that filters would arrive in order, but this may not be true due to network conditions or even multiprocess request handling by our peers. After #226 filters can arrive in any order, and we'll sort them and make sure our storage is consistent
  • ssl init (#223): Adds support for SSL to our Electrum Server. Now you can connect with Floresta's Electrum Server using a secure and private connection using SSL encryption. This might be useful for e.g. public networks where people may sniff your traffic.
  • Add fuzz to floresta(#227, #228): Adds fuzz to floresta using cargo fuzz with a few targets (LocalAddress and UtreexoBlock deserialization)
  • wallet: make it work without the Electrum Server (#233): This is part of a project that tries to make the inners of floresta work independently. Before #233, the wallet needed a running Electrum Server to update it, but now you can run the watch-only wallet without an Electrum Server, if you don't want one. In the future, florestad will be able to run without an Electrum Serve, the wallet and a json-rpc, making all optional.
  • chain/wire: remove the explicit rescan code (#234): This was a feature that allowed users to rescan by downloading all blocks in a range, but this is no longer useful since we have compact block filters, that are way more efficient.
  • Improve connection (#235): Many small changes to how we open new connections with the goal of improving our resilience and making sure we won't stall by not having utreexo peers.
  • Update getutxo (#237): Now the gettxout rpc only returns UTXOS that are cached by the wallet (and only if they are unspent). If you want to use compact block filters to find a UTXO, use the findtxout rpc.
  • deps: remove unused deps (#239): Remove dependencies that are no longer used. Those were found by using cargo-udep
  • cli: replace reqwest with jsonrpc (#240): Changes the http lib used for requests in floresta_cli, because reqwest is too much for this simple code. Now we use jsonrpc which has a small code footprint and almost no cross-dependencies.
  • Improve CI caching (#247): Now CI build artifacts are cached. Unless they are changed by the PR, we don't need to build it again, making CI more efficient and faster.
  • No_std support for floresta-common (#254): now floresta-common (a subcrate that defines some useful primitives to all other crates) can be built with no-std. We also test it to make sure we won't break the no-std build in the future.
  • Add criterion benches and restructure testdata (#259): This adds benchmarks to floresta using criterion. Currently, we mostrly have benchmark for block validation times.
  • rpc: cache addresses on loaddescriptor (#268): loaddescriptors didn't derive addresses when called, only saved the descriptor to our database. After #268 it'll actually derive and cache addresses as expected.
  • CI: Test all feature combinations (#277): Tests all feature combinations on CI for a PR. Making sure that a change won't silently break non-standard builds.
  • Add test-features recipe to justfile (#276): Similar to #276, but add a just command to easily test feature combinations locally.
  • feat: allow hostnames where we take addresses (#286): Now, every option that takes in an address (like --connect or --rpc-address) will also take a hostname (e.g. localhost or floresta-container) and resolve with the system resolver.
  • Add floresta-cli to Docker image (#281): Now you can use floresta-cli inside a docker container.

Notable bugfixes and documentation updates

  • minor improvement when printing height (#218)
  • readme: fix mention of --assume-utreexo option (#219)
  • Added prerequisite to README (#220)
  • Only keep extra peers if they give us a new block (#221)
  • Update copyright notices and use the copyright ident on every public interface file (#224)
  • docs: Update the repo url (#232)
  • rpc: don't try to run some rpcs if in ibd (#229)
  • Fix local seeds (#244)
  • Correct Cargo categories (#243)
  • Fix our dockerfile (once again) (#245)
  • Remove unused maybe_reindex (#246)
  • fix:including requests on requirements.txt (#249)
  • Fixing path to config.toml.sample (#256)
  • Feat: refactor nix files. (#255)
  • Update read me (#264)
  • changed from error to warn message on logging the ssl cert load (#265)
  • Fix clippy warnings (#267)
  • Add full block data for testing and benchmarking (#263)
  • Improve README formatting (#269)
  • Fix electrum tests (#271)
  • Fix cli tests and florestad panic messages (#272)
  • update rust bitcoin to upstream 0.32.4 (#270)
  • Organize ignore files and add IDE configurations (#273)
  • Actually run CI linting with nightly (#274)
  • Fix compile errors for all feature combinations (#275)
  • README: Add badges and fix headers (#278)
  • fix: asserting acc length only one time on load_acc (#279)
  • feat: Specifying rustfmt and clippy to match github actions (#283)
  • Remove an externally reachable unwrap (#285)
  • docs: correct typos in docstrings within florestad/src (#288)
  • Fix on allow-hostnames (#289)
  • Fix shutdown save peers utreexo (#280)
  • flush more often on ibd (#291)
  • Group NodeCommon fields (#292)
  • Update chain_state.rs (ChainStateInner struct changes) (#297)
  • fix: specify version on just commands to avoid incorrect versions being used (#299)

Full Changelog: 0.6.0...0.7.0

v0.6.0

20 Aug 18:51
726dc74
Compare
Choose a tag to compare

Notable changes

New features

  • expose some unexposed values for jsonrpc(#103): Lets the user select between getting a serialized block or a json. The json should mimic core's output for the equivalent getblock rpc.
  • Bring our functional tests to life (#112): attempts to build some basis for the Python-based tests. Now we have utils to spawn an Utreexod node, build blocks, transactions and send/receive network messages. Those utils aren't used yet in any serious test.
  • feat: async add new address to electrum(#113): Now, if you subscribe to an address that we don't follow yet, we'll start following it. Note that this currently only works for the experimental blockchain.scriptpubkye.subscribe endpoint.
  • Implement tagged hashes for the leafhashes (#118): This futures-proof the leaf commitment scheme from future modifications of the committed data, and it's now part of the utreexo protocol
  • feat: -connect cli option (#119): This option lets you connect exclusively to one specific node, given its IP address
  • [WIP]: Create a json-rpc lib (#121): Now the json-rpc has a Rust lib that can be used by other projects to call florestad's json-rpc interface
  • Rework internal node structure(#128): Use our actors model to build optmized nodes for each phase of the startup process: Headers sync, downloading blocks and normally running node.
  • Add AssumeValidArg enum and correct verify_script (#131): This adds a new AssumeValidArg to make communicating the desired assume-valid more ergonomic. It can either be disabled, using the hard-coded value or user-provided.
  • feature: batch request for electrum (#134): Now electrum lets users perform multiple requests at once, rather than sending one at the time. This has some small bandwidth and CPU savings.
  • feat: PoW fraud proof(#133, #147): Implement pow fraud proofs for our node and enable it on signet for testing. This is not enabled on mainnet yet.
  • feature: log to file (#136): Now you can write the logs to a file. This is specially useful if running florestad as a background process
  • florestad: Add lib.rs (#124, #149): florestad is also a lib now, it can be used on other applications and. To see an example of how to use it in other languages that is not Rust, check out this repo.
  • download and store filters from the network (#161, #190, #207): Now we can download BIP-158 Compact Block Filters and use them to recover historical transactions without downloading the whole blockchain.
  • Cache headers on ibd (#169): Hold headers in memory and save all-at-once, because the database can optimize some writing operations
  • electrum: new experimental electrum endpoints (#173): This adds some experimental (and not used by any wallet) endpoints to the electrum server blockchain.scriptpubkey. They are an exact copy of blockchain.scripthash but uses scripts insted of script hashes. The reson why those exists is to make it possible to rescan for wallet addresses without having the user to manually inform their xpub or descriptor
  • Nixify (#176): Adds a nix-based build system and some developer tools to floresta
  • Unit tests for all modules (#168, #202, #200): An ongoing project to unit-test all modules
  • Assume utreexo + bugfixes (#181): make assumeutreexo work on mainnet
  • actually use the -debug option (#184): The option actually always existed, but there wasn't any handling for it. Now using -d or --debug will make the node print debug information to the terminal. This doesn't affect the log file though.
  • Transaction Consensus Rules (#165): Expands floresta's consensus rules implementation, implementing some missing rules for transactions, specially regarding scripts sizes.
  • Test utils for floresta-wire/p2p-wire
  • Improve just file (#204): Adds some useful dev-related comands like lint
  • florestad: rework cli by (#209, #216): Remove some unused options, document all options and improve how we handle versions

Bug fixes and documentation

  • Download blocks if lagging behind (#163)
  • Bugfix: recover from utreexo nodes hangup (#100)
  • If we stay long without recieving any message, send out a ping (#101)
  • small refactor + comments (#105)
  • add our discord to readme (#109)
  • style: add .rustfmt.toml and justfile (#111)
  • bump all rust-bitcoin crates (#108)
  • don't ban on the first violation (#114)
  • Update readme.md (#122)
  • Improve reindex_chain readability and small fixes (#125)
  • Fix the CI error with clippy (#129)
  • Return when there's a tx validation error (#130)
  • wire: hunt down some minor bugs on running_node (#132)
  • fixed adding florestad to path while building (#137)
  • CI:fixes the linting error (#140)
  • chore: update deps (#141)
  • Document how to test (#154)
  • chore: remove duplicated CI checkout (#152)
  • Declared version normalization (#159)
  • Fix/create datadir if missing (#164)
  • fix an incompatibility between our implementation of is_unpendable and utreexo's (#170)
  • bump rustreexo (#171)
  • Improve ibd stability (#174)
  • Potential bug fix in floresta-wire/chain_selector.rs (#179)
  • Bug fix: chain_selector (#182)
  • Node.rs minor fixes (#183)
  • Fix/creating too much conn (#185)
  • fix a small incompatibility with electrum implementation (#189)
  • Broken Link on README (#192)
  • Fix warnings (#193)
  • floresta-electrum: Increase test timeout (#196)
  • add witness and network to fixed peers (#195)
  • fix: force utreexo peers (#201)
  • bug fix: remove inflights of banned peers (#203)
  • fix a crash with node.rs (#208)
  • improve readme (#210)
  • chain-select-node: ban peers on invalid tips (#213)

Full Changelog: Davidson-Souza/Floresta@v0.5.1...0.6.0

Floresta v0.5.1

21 Nov 17:13
31657ac
Compare
Choose a tag to compare

This is a new release with a few bugfixes, as well some minor features. We invite everyone to test, report bugs and give feedbacks.

What's changed

New features

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 and getrawtransaction 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.

Refactor and Bugfixes:

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 some subscribers. 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 an Arc-ed instance of self to chainstate. For modules using the old model, this pr implements a simple Single Producer, Single Consumer channel that implements BlockConsumer.

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.

v0.5.0: "I promise I'll use semversioning more often"

29 Aug 00:44
df0fd83
Compare
Choose a tag to compare

This is the first release after the crate reorg, which. For now on, the GitHub releases will reflect florestad, and every subcrate has its version.

What's Changed

Full Changelog: Davidson-Souza/Floresta@v0.4.0...v0.5.0

v0.4.0

16 Jun 18:21
123d733
Compare
Choose a tag to compare

New major version of Floresta, with some bugfixes and new features like a json-rpc, rescan, output descriptors env var support and more...

What's Changed

Full Changelog: Davidson-Souza/Floresta@0.3.0...v0.4.0

p2p module

23 Mar 00:25
ac6a1de
Compare
Choose a tag to compare

This release is the first version with p2p code merged in. There's still numerous things to change, but should be able to run on its own by now.

What's Changed

Full Changelog: Davidson-Souza/Floresta@0.1.0...0.3.0

v0.2.1

13 Feb 22:34
e05f12d
Compare
Choose a tag to compare

Some minor bugfixes from previous release.

v0.2.0-alpha

08 Feb 18:21
3d8b3e3
Compare
Choose a tag to compare
v0.2.0-alpha Pre-release
Pre-release

New release with a more stable code, also some cleanups. Some major improvements over the last release:

  • Update upstream to use reqwest for json-rpc requests, add support to TLS and keep-alive connections
  • Add headers-first sync, so we can know almost everything about a potential tip before we validate. This will be specially useful when the p2p code is merged
  • Clean-up command line args and introduce config file.
  • Add a asumevalid option for faster IBD
  • Various bug-fixes

What's Changed

Full Changelog: 0.1.0...0.2.0_alpha

v0.1.0

30 Dec 23:44
7a6a603
Compare
Choose a tag to compare

First release with compiled binaries for people to test out.

点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载