Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prep for Beta 1 #513

Merged
merged 6 commits into from
Apr 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ require (
github.com/prometheus/client_golang v1.19.0
github.com/prysmaticlabs/prysm/v5 v5.0.3
github.com/rivo/tview v0.0.0-20230208211350-7dfff1ce7854 // DO NOT UPGRADE
github.com/rocket-pool/node-manager-core v0.2.1-0.20240428142929-651499837522
github.com/rocket-pool/rocketpool-go/v2 v2.0.0-20240421200135-5ec635bb7db3
github.com/rocket-pool/node-manager-core v0.3.0
github.com/rocket-pool/rocketpool-go/v2 v2.0.0-b1
github.com/shirou/gopsutil/v3 v3.24.3
github.com/tyler-smith/go-bip39 v1.1.0
github.com/wealdtech/go-ens/v3 v3.6.0
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -483,10 +483,10 @@ github.com/rocket-pool/batch-query v1.0.0 h1:5HejmT1n1fIdLIqUhTNwbkG2PGOPl3IVjCp
github.com/rocket-pool/batch-query v1.0.0/go.mod h1:d1CmxShzk0fioJ4yX0eFGhz2an1odnW/LZ2cp3eDGIQ=
github.com/rocket-pool/go-merkletree v1.0.1-0.20220406020931-c262d9b976dd h1:p9KuetSKB9nte9I/MkkiM3pwKFVQgqxxPTQ0y56Ff6s=
github.com/rocket-pool/go-merkletree v1.0.1-0.20220406020931-c262d9b976dd/go.mod h1:UE9fof8P7iESVtLn1K9CTSkNRYVFHZHlf96RKbU33kA=
github.com/rocket-pool/node-manager-core v0.2.1-0.20240428142929-651499837522 h1:/5QIMrOzfGfQW8RuefiIZRD5dxcnLMmPHsMlp7l86KU=
github.com/rocket-pool/node-manager-core v0.2.1-0.20240428142929-651499837522/go.mod h1:f/w3jnzi3ipXet7acZ0pQhGbolU/g3IDVrqXcNWuHw4=
github.com/rocket-pool/rocketpool-go/v2 v2.0.0-20240421200135-5ec635bb7db3 h1:71IYwGtk3IDbTrrhTeIYJoYSCBowrU+ebacgeXI3cOs=
github.com/rocket-pool/rocketpool-go/v2 v2.0.0-20240421200135-5ec635bb7db3/go.mod h1:KgToyMtgmDo9gsmJ8KFpcpLbkETDXnPi0J8M+YmUpmA=
github.com/rocket-pool/node-manager-core v0.3.0 h1:eXju+2URsEw6qaw92J3+JhqbtkHNrhE0GWNiEz7tKXo=
github.com/rocket-pool/node-manager-core v0.3.0/go.mod h1:f/w3jnzi3ipXet7acZ0pQhGbolU/g3IDVrqXcNWuHw4=
github.com/rocket-pool/rocketpool-go/v2 v2.0.0-b1 h1:eIABhMJ2yMY1+bRAgVFlZkQuE6SILD3O/pbXsFqFlY0=
github.com/rocket-pool/rocketpool-go/v2 v2.0.0-b1/go.mod h1:RFw2LxrDX8wO+ShLXR/mM9ZaIech1WvqKmFv4eJTlXI=
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
Expand Down
2 changes: 1 addition & 1 deletion install/deploy/templates/alerting/alertmanager.tmpl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Autogenerated - DO NOT MODIFY THIS FILE DIRECTLY
# Autogenerated - DO NOT MODIFY THIS FILE DIRECTLY

global:
# ResolveTimeout is the default value used by alertmanager if the alert does
Expand Down
4 changes: 2 additions & 2 deletions install/packages/debian/debian/changelog
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
rocketpool (2.0.0~beta.1) UNRELEASED; urgency=medium
rocketpool (2.0.0~b1) unstable; urgency=medium

* Welcome to Smart Node v2! This is a completely redesigned Smart Node from the ground up, taking advantage of years of lessons learned and user feedback. The list of features and changes is far too long to list here, but here are some highlights:
* Support for installing and updating via Debian's `apt` package manager (other package managers coming soon!)
Expand All @@ -8,4 +8,4 @@ rocketpool (2.0.0~beta.1) UNRELEASED; urgency=medium
* And much more!
* To learn all about what's changed in Smart Node v2 and how to use it, take a look at our guide: https://github.com/rocket-pool/smartnode/blob/v2/v2.md

-- Rocket Pool <[email protected]> Sun, 28 Apr 2024 16:55:22 +0000
-- Rocket Pool <[email protected]> Mon, 29 Apr 2024 12:41:02 +0000
2 changes: 1 addition & 1 deletion rocketpool-cli/commands/node/deposit.go
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ func nodeDeposit(c *cli.Context) error {
// Log & return
fmt.Printf("The node deposit of %.6f ETH was made successfully!\n", math.RoundDown(eth.WeiToEth(amountWei), 6))
fmt.Printf("Your new minipool's address is: %s\n", response.Data.MinipoolAddress)
fmt.Printf("The validator pubkey is: %s\n\n", response.Data.ValidatorPubkey.Hex())
fmt.Printf("The validator pubkey is: %s\n\n", response.Data.ValidatorPubkey.HexWithPrefix())

fmt.Println("Your minipool is now in Initialized status.")
fmt.Println("Once the remaining ETH has been assigned to your minipool from the staking pool, it will move to Prelaunch status.")
Expand Down
23 changes: 21 additions & 2 deletions rocketpool-cli/commands/pdao/get-voting-power.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (

"github.com/rocket-pool/node-manager-core/eth"
"github.com/rocket-pool/smartnode/v2/rocketpool-cli/client"
"github.com/rocket-pool/smartnode/v2/rocketpool-cli/utils/terminal"
"github.com/urfave/cli/v2"
)

Expand All @@ -13,13 +14,31 @@ func getVotePower(c *cli.Context) error {
rp := client.NewClientFromCtx(c)

// Get node's voting power at the latest block
response, err := rp.Api.PDao.GetVotingPower()
vpResponse, err := rp.Api.PDao.GetVotingPower()
if err != nil {
return err
}

// Get the node's status
statusResponse, err := rp.Api.Node.Status()
if err != nil {
return err
}

// Print Results
fmt.Println("== Node Voting Power ==")
fmt.Printf("Your current voting power: %.10f\n", eth.WeiToEth(response.Data.VotingPower))
if statusResponse.Data.IsVotingInitialized {
fmt.Println("The node has been initialized for onchain voting.")

} else {
fmt.Println("The node has NOT been initialized for onchain voting. You need to run `rocketpool pdao initialize-voting` to participate in onchain votes.")
}
if statusResponse.Data.OnchainVotingDelegate == statusResponse.Data.AccountAddress {
fmt.Println("The node doesn't have a delegate, which means it can vote directly on onchain proposals.")
} else {
fmt.Printf("The node has a voting delegate of %s%s%s which can represent it when voting on Rocket Pool onchain governance proposals.\n", terminal.ColorBlue, statusResponse.Data.OnchainVotingDelegateFormatted, terminal.ColorReset)
}

fmt.Printf("Your current voting power: %.10f\n", eth.WeiToEth(vpResponse.Data.VotingPower))
return nil
}
3 changes: 2 additions & 1 deletion rocketpool-daemon/api/node/stake-rpl.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"github.com/rocket-pool/node-manager-core/api/server"
"github.com/rocket-pool/node-manager-core/api/types"
"github.com/rocket-pool/node-manager-core/utils/input"
"github.com/rocket-pool/smartnode/v2/rocketpool-daemon/common/utils"
"github.com/rocket-pool/smartnode/v2/shared/types/api"
)

Expand Down Expand Up @@ -102,7 +103,7 @@ func (c *nodeStakeRplContext) PrepareData(data *api.NodeStakeRplData, opts *bind
if data.CanStake {
if c.allowance.Cmp(c.amount) < 0 {
// Do the approve TX if needed
approvalAmount := getMaxApproval()
approvalAmount := utils.GetMaxApproval()
txInfo, err := c.rpl.Approve(c.nsAddress, approvalAmount, opts)
if err != nil {
return types.ResponseStatus_Error, fmt.Errorf("error getting TX info to approve increasing RPL's allowance: %w", err)
Expand Down
25 changes: 8 additions & 17 deletions rocketpool-daemon/api/node/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import (
"github.com/rocket-pool/rocketpool-go/v2/rocketpool"
"github.com/rocket-pool/rocketpool-go/v2/tokens"
rptypes "github.com/rocket-pool/rocketpool-go/v2/types"
ens "github.com/wealdtech/go-ens/v3"

"github.com/rocket-pool/node-manager-core/api/server"
"github.com/rocket-pool/node-manager-core/api/types"
Expand All @@ -29,6 +28,7 @@ import (
"github.com/rocket-pool/smartnode/v2/rocketpool-daemon/common/alerting/alertmanager/models"
"github.com/rocket-pool/smartnode/v2/rocketpool-daemon/common/collateral"
"github.com/rocket-pool/smartnode/v2/rocketpool-daemon/common/contracts"
"github.com/rocket-pool/smartnode/v2/rocketpool-daemon/common/utils"
"github.com/rocket-pool/smartnode/v2/rocketpool-daemon/common/voting"
"github.com/rocket-pool/smartnode/v2/shared/config"
"github.com/rocket-pool/smartnode/v2/shared/types/api"
Expand Down Expand Up @@ -211,18 +211,18 @@ func (c *nodeStatusContext) PrepareData(data *api.NodeStatusData, opts *bind.Tra

// Basic properties
data.AccountAddress = c.node.Address
data.AccountAddressFormatted = c.getFormattedAddress(data.AccountAddress)
data.AccountAddressFormatted = utils.GetFormattedAddress(c.ec, data.AccountAddress)
data.Trusted = c.odaoMember.Exists.Get()
data.Registered = c.node.Exists.Get()
data.PrimaryWithdrawalAddress = c.node.PrimaryWithdrawalAddress.Get()
data.PrimaryWithdrawalAddressFormatted = c.getFormattedAddress(data.PrimaryWithdrawalAddress)
data.PrimaryWithdrawalAddressFormatted = utils.GetFormattedAddress(c.ec, data.PrimaryWithdrawalAddress)
data.PendingPrimaryWithdrawalAddress = c.node.PendingPrimaryWithdrawalAddress.Get()
data.PendingPrimaryWithdrawalAddressFormatted = c.getFormattedAddress(data.PendingPrimaryWithdrawalAddress)
data.PendingPrimaryWithdrawalAddressFormatted = utils.GetFormattedAddress(c.ec, data.PendingPrimaryWithdrawalAddress)
data.IsRplWithdrawalAddressSet = c.node.IsRplWithdrawalAddressSet.Get()
data.RplWithdrawalAddress = c.node.RplWithdrawalAddress.Get()
data.RplWithdrawalAddressFormatted = c.getFormattedAddress(data.RplWithdrawalAddress)
data.RplWithdrawalAddressFormatted = utils.GetFormattedAddress(c.ec, data.RplWithdrawalAddress)
data.PendingRplWithdrawalAddress = c.node.PendingRplWithdrawalAddress.Get()
data.PendingRplWithdrawalAddressFormatted = c.getFormattedAddress(data.PendingRplWithdrawalAddress)
data.PendingRplWithdrawalAddressFormatted = utils.GetFormattedAddress(c.ec, data.PendingRplWithdrawalAddress)
data.TimezoneLocation = c.node.TimezoneLocation.Get()
data.RplStake = c.node.RplStake.Get()
data.EffectiveRplStake = c.node.EffectiveRplStake.Get()
Expand All @@ -238,7 +238,7 @@ func (c *nodeStatusContext) PrepareData(data *api.NodeStatusData, opts *bind.Tra
data.RplLocked = c.node.RplLocked.Get()
data.IsVotingInitialized = c.node.IsVotingInitialized.Get()
data.OnchainVotingDelegate = c.node.CurrentVotingDelegate.Get()
data.OnchainVotingDelegateFormatted = c.getFormattedAddress(data.OnchainVotingDelegate)
data.OnchainVotingDelegateFormatted = utils.GetFormattedAddress(c.ec, data.OnchainVotingDelegate)

// Minipool info
mps, err := c.getMinipoolInfo(data)
Expand Down Expand Up @@ -266,7 +266,7 @@ func (c *nodeStatusContext) PrepareData(data *api.NodeStatusData, opts *bind.Tra
emptyAddress := common.Address{}
data.SnapshotVotingDelegate = c.delegate
if data.SnapshotVotingDelegate != emptyAddress {
data.SnapshotVotingDelegateFormatted = c.getFormattedAddress(data.SnapshotVotingDelegate)
data.SnapshotVotingDelegateFormatted = utils.GetFormattedAddress(c.ec, data.SnapshotVotingDelegate)
}
props, err := voting.GetSnapshotProposals(c.cfg, c.node.Address, c.delegate, true)
if err != nil {
Expand Down Expand Up @@ -332,15 +332,6 @@ func (c *nodeStatusContext) PrepareData(data *api.NodeStatusData, opts *bind.Tra
return types.ResponseStatus_Success, nil
}

// Get a formatting string containing the ENS name for an address (if it exists)
func (c *nodeStatusContext) getFormattedAddress(address common.Address) string {
name, err := ens.ReverseResolve(c.ec, address)
if err != nil {
return address.Hex()
}
return fmt.Sprintf("%s (%s)", name, address.Hex())
}

// Get info pertaining to the node's minipools
func (c *nodeStatusContext) getMinipoolInfo(data *api.NodeStatusData) ([]minipool.IMinipool, error) {
// Minipool info
Expand Down
3 changes: 2 additions & 1 deletion rocketpool-daemon/api/node/swap-rpl.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"github.com/rocket-pool/node-manager-core/api/server"
"github.com/rocket-pool/node-manager-core/api/types"
"github.com/rocket-pool/node-manager-core/utils/input"
"github.com/rocket-pool/smartnode/v2/rocketpool-daemon/common/utils"
"github.com/rocket-pool/smartnode/v2/shared/types/api"
)

Expand Down Expand Up @@ -101,7 +102,7 @@ func (c *nodeSwapRplContext) PrepareData(data *api.NodeSwapRplData, opts *bind.T
if data.CanSwap {
if c.allowance.Cmp(c.amount) < 0 {
// Do the approve TX if needed
approvalAmount := getMaxApproval()
approvalAmount := utils.GetMaxApproval()
txInfo, err := c.fsrpl.Approve(c.rplAddress, approvalAmount, opts)
if err != nil {
return types.ResponseStatus_Error, fmt.Errorf("error getting TX info to approve increasing legacy RPL's allowance: %w", err)
Expand Down
11 changes: 0 additions & 11 deletions rocketpool-daemon/api/node/utils.go

This file was deleted.

10 changes: 7 additions & 3 deletions rocketpool-daemon/api/pdao/get-voting-power.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (

"github.com/rocket-pool/node-manager-core/api/server"
"github.com/rocket-pool/node-manager-core/api/types"
"github.com/rocket-pool/smartnode/v2/rocketpool-daemon/common/utils"
"github.com/rocket-pool/smartnode/v2/shared/types/api"
)

Expand Down Expand Up @@ -67,14 +68,17 @@ func (c *protocolDaoGetVotingPowerContext) PrepareData(data *api.ProtocolDaoGetV
if err != nil {
return types.ResponseStatus_Error, fmt.Errorf("error getting latest block number: %w", err)
}
data.BlockNumber = uint32(blockNumber)

// Get the voting power at that block
// Get the voting power and delegate at that block
err = rp.Query(func(mc *batch.MultiCaller) error {
node.GetVotingPowerAtBlock(mc, &data.VotingPower, uint32(blockNumber))
node.GetVotingPowerAtBlock(mc, &data.VotingPower, data.BlockNumber)
node.GetVotingDelegateAtBlock(mc, &data.OnchainVotingDelegate, data.BlockNumber)
return nil
}, nil)
if err != nil {
return types.ResponseStatus_Error, fmt.Errorf("error getting voting power for block %d: %w", blockNumber, err)
return types.ResponseStatus_Error, fmt.Errorf("error getting voting info for block %d: %w", blockNumber, err)
}
data.OnchainVotingDelegateFormatted = utils.GetFormattedAddress(ec, data.OnchainVotingDelegate)
return types.ResponseStatus_Success, nil
}
2 changes: 1 addition & 1 deletion rocketpool-daemon/api/wallet/set-ens-name.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"github.com/rocket-pool/node-manager-core/api/server"
"github.com/rocket-pool/node-manager-core/api/types"
"github.com/rocket-pool/smartnode/v2/shared/types/api"
ens "github.com/wealdtech/go-ens/v3"
"github.com/wealdtech/go-ens/v3"
)

// ===============
Expand Down
27 changes: 27 additions & 0 deletions rocketpool-daemon/common/utils/utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package utils

import (
"fmt"
"math/big"

"github.com/ethereum/go-ethereum/common"
"github.com/rocket-pool/node-manager-core/eth"
ens "github.com/wealdtech/go-ens/v3"
)

func GetMaxApproval() *big.Int {
// Calculate max uint256 value
maxApproval := big.NewInt(2)
maxApproval = maxApproval.Exp(maxApproval, big.NewInt(256), nil)
maxApproval = maxApproval.Sub(maxApproval, big.NewInt(1))
return maxApproval
}

// Get a formatting string containing the ENS name for an address (if it exists)
func GetFormattedAddress(ec eth.IExecutionClient, address common.Address) string {
name, err := ens.ReverseResolve(ec, address)
if err != nil {
return address.Hex()
}
return fmt.Sprintf("%s (%s)", name, address.Hex())
}
2 changes: 1 addition & 1 deletion rocketpool-daemon/node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ func (t *TaskLoop) Stop() error {
ctx, cancel := context.WithTimeout(context.Background(), metricsShutdownTimeout)
defer cancel()
err := t.metricsServer.Shutdown(ctx)
if !errors.Is(err, http.ErrServerClosed) {
if err != nil && !errors.Is(err, http.ErrServerClosed) {
return fmt.Errorf("Error stopping metrics server: %w", err)
}
}
Expand Down
5 changes: 4 additions & 1 deletion shared/types/api/pdao.go
Original file line number Diff line number Diff line change
Expand Up @@ -299,5 +299,8 @@ type ProtocolDaoCurrentVotingDelegateData struct {
}

type ProtocolDaoGetVotingPowerData struct {
VotingPower *big.Int `json:"votingPower"`
VotingPower *big.Int `json:"votingPower"`
OnchainVotingDelegate common.Address `json:"onchainVotingDelegate"`
OnchainVotingDelegateFormatted string `json:"onchainVotingDelegateFormatted"`
BlockNumber uint32 `json:"blockNumber"`
}
2 changes: 1 addition & 1 deletion shared/version.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package shared

const RocketPoolVersion string = "2.0.0-dev"
const RocketPoolVersion string = "2.0.0-b1"

const Logo string = `______ _ _ ______ _
| ___ \ | | | | | ___ \ | |
Expand Down
61 changes: 60 additions & 1 deletion v2.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ 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 [section below](#installing-v2).

- 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.
Expand Down Expand Up @@ -77,7 +79,7 @@ The following is a list of what's changed from v1 so far, in no particular order
- Use `rocketpool service node-logs` with `api`, `tasks`, and/or `watchtower` to view the new logs respectively.


## Installing v2
## Installing v2 - Docker and Hybrid Mode

Prior to installation, please note that Smart Node v2 will **only work with the Rocket Pool Houston upgrade**. It will not work with Atlas or any previous Rocket Pool protocol version.

Expand All @@ -95,6 +97,21 @@ This will delete the old v1 CLI and some accompanying installation files that ar
Now, follow the instructions in whichever of the below sections makes sense for your situation.


### Installing Docker

Before installing the Smart Node, you'll need to have Docker's apt repository set up so your system can install Docker. If you have it set up already (i.e., from Smart Node v1), you can skip this step.

Start by following [Docker's installation instructions](https://docs.docker.com/engine/install/) to install it for your operating system.

Next, add your user to the group of Docker administrators:
```
sudo usermod -aG docker $USER
```

Finally, exit the terminal session and start a new one (log out and back in or close and re-open SSH) for the new permissions to take effect.



### Installing via `rocketpool service install` and GitHub

This method was used by Smart Node v1, and is still available in v2. It is the "general purpose" method can be used for any release, including development prototypes, and will work on any system that Rocket Pool supports. At a high level it involves manually downloading the CLI, then running a command with it to install the rest of the service.
Expand Down Expand Up @@ -176,6 +193,48 @@ Development packages are uploaded with the other development artifacts on GitHub
4. Don't forget to include `-u` when running `rocketpool service config` to emulate a package upgrade!


## Installing v2 - Native Mode

Prior to installation, please note that Smart Node v2 will **only work with the Rocket Pool Houston upgrade**. It will not work with Atlas or any previous Rocket Pool protocol version.


### **IMPORTANT:** Migrating from Smart Node v1

If you have Smart Node v1 already installed on your machine, you will need to do a little bit of cleanup before installing v2.

First, **back up your existing Rocket Pool directory (`~/.rocketpool` by default)** somewhere safe, just in case. Next, run the following command:
```
rm -rf ~/bin/rocketpool ~/.rocketpool/scripts ~/.rocketpool/templates ~/.rocketpool/prometheus.tmpl
```
This will delete the old v1 CLI and some accompanying installation files that are no longer stored in your home directory.

Now, delete the Watchtower service as it's no longer needed:
```
sudo systemctl stop rp-watchtower

sudo systemctl disable rp-watchtower

sudo rm -f /etc/systemd/system/rp-watchtower.service
```

Next, follow the instructions below.


### Installing Native Mode

The Native mode installation process is quite similar to [the process used in v1](https://docs.rocketpool.net/guides/node/native) so we recommend you use that as a starting point.

The differences are as follows:

1. You do *not* need to create a service for the Watchtower. You only need to create one for the Node. In v2, the Watchtower has been rolled into the Node.
2. The `ExecStart` portion of the `rp-node` service definition is now:
```
/usr/local/bin/rocketpoold -u /srv/rocketpool
```
3. Whenever you run the CLI, you should use the `-n` flag to specify native mode (i.e. `rocketpool -n service config`). If you previously used the `-d` flag, it has been removed. We recommend setting the alias `rp="rocketpool -n -c /srv/rocketpool"` now for convenience.
4. When running `rp service config`, make sure the paths to the `VC Restart Script` and the `Validator Stop Command` point to the correct locations on your filesystem as the defaults have changed in v2.


## Running v2 as a Node Operator

Running the Smart Node is, for all practical purposes, the same as it was in `v1`. The `rocketpool service start` command will still initialize Docker compose with all of the latest container definition files and begin the service, `rocketpool service stop` will still shut it down, and so on. The primary differences are:
Expand Down
Loading