github rocket-pool/smartnode v2.0.0-b1
v2.0.0 Beta 1

latest releases: v1.13.6, v1.13.5, v2.0.0-b3...
2 months ago

After months of development, Rocket Pool is proud to release the first public beta of Smart Node v2.0.

Smart Node v2 is a complete rewrite of the Smart Node that aims to improve existing functionality, add new functionality, and make it dramatically easier to maintain. It incorporates modern tooling and techniques, years of lessons learned from working with the original Smart Node in the wild, and many suggestions provided by users that made sense but just weren't practical to build into v1.


⚠️ Smart Node v2.0 requires the Houston protocol upgrade to function properly. As such, you can only use it on the public Holesky testnet (which has been upgraded to Houston).


Overview of What's New

The following is a list of what's changed from v1 so far, in no particular order:

Installation

NOTE: for actual installation instructions, please see the v2 installation guide.

  • The Smart Node now comes in a .deb package, so users running Debian or Debian-derivative distributions can now install it via sudo apt install rocketpool and update it via sudo apt update && sudo apt dist-upgrade once the Rocket Pool repository is set up.
    • Packages for other distributions, such as RHEL or Fedora, will be introduced at a later date.
    • For now, users not on Debian-based systems can install via the traditional rocketpool service install command. It will still pull the necessary files from GitHub as it did before.
  • Installation no longer puts all core system files into your ~/.rocketpool directory. System files (such as Docker compose templates and execution scripts) are now put into /usr/share/rocketpool. The CLI binary is now installed to /usr/bin/rocketpool.
    • Runtime files, such as your Docker compose overrides and logging, are still put into ~/.rocketpool by default.
  • Installation via the CLI can optionally now be done with local install scripts and packages on your filesystem instead of needing to reach out to GitHub. This is helpful in places where GitHub can't be accessed.
  • (For developers) The old smartnode-install repository has been migrated into the smartnode repository.

Daemon (Node Container / Service)

  • The api, node, and watchtower Docker containers have now all been consolidated into one node container.
  • The daemon now uses Multicall for all of its Execution client reads, batching state reads together into as few requests as possible. This significantly reduces the overhead (both CPU-wise and time-wise) on large operations that required many blockchain reads, such as minipool status or the new on-chain Protocol DAO voting system.
  • You can now run the node in passwordless mode, where the password for your node wallet is not saved to disk. This way, if someone steals your node, they will not have access to your node wallet. (They can still slash your validators, though).
    • When using passwordless mode, you'll need to provide the password via the CLI any time you restart the daemon. It will be preserved in memory but not on disk.
  • You can now enter masquerade mode, where your node assumes an arbitrary address that you specify. For all intents and purposes, your API, node, and watchtower loops will proceed to act like the specified node instead. As you don't have the private key for that address, your node will be in read-only mode while masquerading and won't be able to submit transactions or recover validator keys. You can end the masquerade and return to your normal (wallet) address at any time.
    • This is particularly useful for support and debugging.
  • The daemon now supports graceful shutdowns of the API server, node, and watchtower task loops rather than terminating them immediately upon closing.

API

  • The daemon API has been overhauled. It is no longer a sequence of terminal commands executed by the CLI via docker exec. It has been replaced with a true HTTP-based API endpoint.
    • The API endpoint is hosted on a Unix socket and is accessible by processes running as the user on the node's local filesystem (e.g., the new Smart Node CLI).
    • It is not (currently) accessible via a TCP port, so it can't be reached via browser; this is a feature that will be coming in the future but requires the addition of an authentication system first.
    • Once that is in place, the Smart Node will be open to things such as WebUIs to replace (or at least supplement) the CLI.
  • The API is now a persistent process; instead of starting and stopping with every CLI command, as in v1, it will now start with the rocketpool_node daemon and maintain state until the daemon stops. This means it doesn't need to reacquire all of the network contracts and parse their ABIs with every call; it only does this once at startup, which provides a significant speedup over v1.

Logging

  • The CLI and daemon both now have improved logging systems.
    • The CLI's global --debug flag will now print debugging information to the terminal as the relevant command is being executed.
    • The daemon now logs its activities to three separate files:
      • api.log for API requests and responses, such as HTTP requests submitted by the CLI (completely new, v1 unfortunately does not have an analog for this)
      • tasks.log which records logs from the node's task loop (used to be the standard output of the rocketpool_node container)
      • watchtower.log which records logs from the watchtower's task loop (used to be the standard output of the rocketpool_watchtower container)
    • The daemon's logs can be written in logfmt or JSON. They support proper, customizable log rotation and four log levels ranging from DEBUG to ERROR.

Transactions

  • In v1, commands that provide multiple selectable options (such as distributing minipool balances) would only allow you to select one option from the list, or "all". In v2, you are now able to select an arbitrary combination of options if you want to trigger the function on some, but not all, of the options.
  • In v1, running a command on multiple options would submit the transactions in sequence; the first would submit, then it would wait for it to complete before submitting the next one, and so on. In v2, the Smart Node now submits all transactions at the same time and waits for them in parallel once they've been submitted.
    • This will make multi-tx operations much, much faster and less sensitive to gas fluctuations, as multiple TXs can now be included in the same block together.
    • This also fixes issues where the selected gas price was only applied to the first transaction in v1. In v2, the selected gas price is applied to all transactions.

CLI Command Changes

  • Use rocketpool -pt ... to print raw transaction info (such as calldata) without submitting if you want to use the calldata for your own activities.
  • Use rocketpool -st ... to sign all transactions and print them without submitting them to the network. This is useful for things like offline wallets or creating custom transaction bundles for services like Flashbots Protect.
  • Use rocketpool --debug ... to print debug info about the command being run, such as API back-and-forth traffic or other variables.
  • When using the rocketpool service config TUI to modify the Smart Node's configuration, you can now include the -u file to intentionally restore all of the settings that will be replaced during a Smart Node upgrade, even if you're not upgrading.
    • This is useful if you manually tweaked container tags and just want to get the "recommended" tags back.
    • This is also useful for development testing where you want to emulate an upgrade when you install a new build, even if the new version is the same as the old version.
  • rocketpool node sync has been moved to rocketpool service sync to more accurately reflect its nature.
  • rocketpool node sign-message and rocketpool node send-message have been moved to rocketpool wallet sign-message and rocketpool wallet send-message for the same reason.
  • Use rocketpool wallet delete-password to enter passwordless mode.
  • Use rocketpool wallet set-password to provide the password to the daemon. You will be prompted for whether or not you want to save it to disk.
  • Use rocketpool wallet masquerade to set your node's address to someone else.
  • Use rocketpool wallet restore-address to end masquerading and set your node's address to your wallet address.
  • Use rocketpool service node-logs with api, tasks, and/or watchtower to view the new logs respectively.

Installation

Please see the v2 installation guide for installation instructions for Docker and Hybrid mode or for Native mode depending on your setup.

Feedback

To prevent mixing v2 feedback with the existing v1 Smart Node, we request that you provide feedback in our Discord server, in the #beta-feedback thread.

Don't miss a new smartnode release

NewReleases is sending notifications on new releases.