* Adds a mempool request to wait for a transaction verification result and uses it in `sendrawtransaction` RPC method
* removes unnecessary clone
* fix clippy warnings
* returns verification errors for all `mempool::Queue` requests, removes `QueueRpc` request variant
* returns oneshot channel in mempool::Response::Queue
* updates a test vector to check for download or verification error in mempool::response::Queued result receiver
* Always require tokio as a dependency in zebra-node-services
* checks for closed channel errors in sendrawtransaction and updates a prop test to check that verification errors are propagated correctly
* Splits `atomic_write_to_tmp_file` out of `zebra_network::Config::update_peer_cache`
* Uses the new `atomic_write_to_tmp_file` fn in `update_peer_cache()`
* Replaces repetitive code for getting the default peer and state cache directories with `default_cache_dir()`
* Converts `atomic_write_to_tmp_file` to a blocking function and adds `spawn_atomic_write_to_tmp_file` for use in async environments.
* Uses `atomic_write_to_tmp_file` to write database versions to disk
* Removes `spawn_atomic_write_to_tmp_file()` and inlines its body at its callsite to avoid adding tokio as a dependency of zebra-chain.
* Apply suggestions from code review
Co-authored-by: Marek <mail@marek.onl>
---------
Co-authored-by: Marek <mail@marek.onl>
* fix(docker): allow the `zebra` user access to relevant dirs
When runnning a Zebra node using Docker without a privileged user, you won't be able to modify some files and directories, not even the ones in the current directory, as the `zebra` user has no permission to `/`.
The best way to solve this is making the `/opt/zebrad` the current `WORKDIR`. This also requires moving the `entrypoint.sh` from the root `/` directory to `/etc/zebrad` as this directory is used to save configuration, and other files.
An `APP_HOME` ARG is used as not all platforms where a Docker container is deployed allows writting permissions to the `/opt` directory. This allow some users to re-build the image with a custom `WORKDIR`
* fix(docker): allow starting the container without a `zebrad` command
As `gosu` is just required and available in our `runtime` image, trying to run `docker run -it --rm --name tests -t zfnd/zebra:<pr> /bin/bash` in other stages will fail, as `gosu` is not available.
* Updates `EOS_PANIC_AFTER` end of support constant from 16 weeks to 14 weeks, so the Mainnet panic height is just before the second halving and end of the current dev fund.
* version bumps
* Updates CHANGELOG.md
* Updates changelog
* updates end of support time to 10 weeks
* Adds a note to the changelog about recovering after finalizing blocks from a fork
* Add new changes on main to CHANGELOG.md
* Updates ESTIMATED_RELEASE_HEIGHT
* Apply suggestions from code review
Co-authored-by: Conrado Gouvea <conrado@zfnd.org>
* Update zebrad/src/components/sync/end_of_support.rs
---------
Co-authored-by: Conrado Gouvea <conrado@zfnd.org>
* fix(docker): typo and uknown option in debian
* fix(docker): use `gosu` for rootless execution
Some of our entrypoint commands requires creating directories and files in places a non-privileged user can't access.
So we use `gosu` to step down from `root` to a non-privileged user during container startup, right at our application execution.