Skip to content

Commit 5d4805c

Browse files
felipemaderogithub-actions[bot]meaghanfitzgerald
authored
TmpNet on Local Networks (#2576)
* start/stop/clean start working for basic local network * add missing files * goimports * move network load and stop inside tmpnet file * improve bootstrapping status check and have better names for localnet info * centralize tmpnet usage. fix status partially * make network start to use given avalanchego * some refactors * more refactoring * cleanup * refactor * preparing to work on track * move blockchain boostrapping check to tmpnet * added blockchain config stuff * saving RPCs into sidecar * local network non sovereign flow kind of migrated * add missing file * adding health info to status * fixed output * lint * fix go.mod * fix licenses * make clean to not fail if no network up * add wait before setting aliases * only set aliases on validators * improve alias and bootstrap check functions to base on subnet id * rm debugging print * fix for a e2e * fix more e2e * more fixes * e2e fix attempt * fixes to pass e2e * use GetApp() on all tests * add some comments * move helpers to application * fix uris inside tmpnet wrapper * add some comments * avoid using latest on network restart * nit * e2e * fix e2e * chore: Update MD files [skip ci] * empty * chore: Update MD files [skip ci] * e2e * nit * chore: Update MD files [skip ci] * chore: Update MD files [skip ci] * use fixed ANR * chore: Update MD files [skip ci] * more fixes * chore: Update MD files [skip ci] * add back script * chore: Update MD files [skip ci] * reformatting and comments * Update cmd/networkcmd/start.go Co-authored-by: Meaghan FitzGerald <[email protected]> Signed-off-by: felipemadero <[email protected]> * address PR comment * address RS comments * address MN comments part 1 * address MN comments 2 * mode blockchain info stuff to its own file * don't write avalanchego path into extra local network data * simplify running check * added deadline check to busy wait * add per node chain config * e2e fix * fix e2e * nit * lets make this work * fix e2e * fix e2e? * filter not running bootstrappers * addres MN comments * address MN comments * nit --------- Signed-off-by: felipemadero <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Meaghan FitzGerald <[email protected]>
1 parent 6691936 commit 5d4805c

File tree

57 files changed

+2126
-1240
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+2126
-1240
lines changed

cmd/blockchaincmd/convert.go

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,34 @@ import (
77
"fmt"
88
"math/big"
99
"os"
10-
"path/filepath"
1110
"strings"
1211
"time"
1312

14-
"github.com/ava-labs/avalanche-cli/pkg/txutils"
15-
16-
"github.com/ava-labs/avalanche-cli/pkg/binutils"
17-
"github.com/ava-labs/avalanche-cli/pkg/contract"
18-
"github.com/ava-labs/avalanche-cli/pkg/evm"
19-
blockchainSDK "github.com/ava-labs/avalanche-cli/sdk/blockchain"
20-
"github.com/ava-labs/avalanchego/config"
21-
"github.com/ava-labs/avalanchego/ids"
22-
23-
"github.com/ava-labs/avalanchego/vms/platformvm/txs"
24-
2513
"github.com/ava-labs/avalanche-cli/pkg/blockchain"
26-
2714
"github.com/ava-labs/avalanche-cli/pkg/cobrautils"
2815
"github.com/ava-labs/avalanche-cli/pkg/constants"
16+
"github.com/ava-labs/avalanche-cli/pkg/contract"
17+
"github.com/ava-labs/avalanche-cli/pkg/evm"
2918
"github.com/ava-labs/avalanche-cli/pkg/keychain"
19+
"github.com/ava-labs/avalanche-cli/pkg/localnet"
3020
"github.com/ava-labs/avalanche-cli/pkg/models"
3121
"github.com/ava-labs/avalanche-cli/pkg/networkoptions"
3222
"github.com/ava-labs/avalanche-cli/pkg/node"
3323
"github.com/ava-labs/avalanche-cli/pkg/prompts"
3424
"github.com/ava-labs/avalanche-cli/pkg/subnet"
25+
"github.com/ava-labs/avalanche-cli/pkg/txutils"
3526
"github.com/ava-labs/avalanche-cli/pkg/utils"
3627
"github.com/ava-labs/avalanche-cli/pkg/ux"
28+
"github.com/ava-labs/avalanche-cli/pkg/vm"
29+
blockchainSDK "github.com/ava-labs/avalanche-cli/sdk/blockchain"
3730
validatorManagerSDK "github.com/ava-labs/avalanche-cli/sdk/validatormanager"
3831
"github.com/ava-labs/avalanchego/api/info"
32+
"github.com/ava-labs/avalanchego/config"
33+
"github.com/ava-labs/avalanchego/ids"
3934
"github.com/ava-labs/avalanchego/utils/logging"
4035
"github.com/ava-labs/avalanchego/utils/units"
36+
"github.com/ava-labs/avalanchego/vms/platformvm/txs"
37+
4138
"github.com/ethereum/go-ethereum/common"
4239
"github.com/spf13/cobra"
4340
)
@@ -103,7 +100,13 @@ Sovereign L1s require bootstrap validators. avalanche blockchain convert command
103100
return cmd
104101
}
105102

106-
func StartLocalMachine(network models.Network, blockchainName string, deployBalance, availableBalance uint64) error {
103+
func StartLocalMachine(
104+
network models.Network,
105+
sidecar models.Sidecar,
106+
blockchainName string,
107+
deployBalance,
108+
availableBalance uint64,
109+
) error {
107110
var err error
108111
if network.Kind == models.Local {
109112
useLocalMachine = true
@@ -182,29 +185,25 @@ func StartLocalMachine(network models.Network, blockchainName string, deployBala
182185
_ = node.StopLocalNode(app)
183186
anrSettings := node.ANRSettings{}
184187
avagoVersionSettings := node.AvalancheGoVersionSettings{}
185-
if avagoBinaryPath == "" {
186-
useLatestAvalanchegoPreReleaseVersion := true
187-
useLatestAvalanchegoReleaseVersion := false
188-
if userProvidedAvagoVersion != constants.DefaultAvalancheGoVersion {
189-
useLatestAvalanchegoReleaseVersion = false
190-
useLatestAvalanchegoPreReleaseVersion = false
191-
} else {
192-
userProvidedAvagoVersion = ""
193-
}
194-
avaGoVersionSetting := node.AvalancheGoVersionSettings{
195-
UseCustomAvalanchegoVersion: userProvidedAvagoVersion,
196-
UseLatestAvalanchegoPreReleaseVersion: useLatestAvalanchegoPreReleaseVersion,
197-
UseLatestAvalanchegoReleaseVersion: useLatestAvalanchegoReleaseVersion,
198-
}
199-
avalancheGoVersion, err := node.GetAvalancheGoVersion(app, avaGoVersionSetting)
200-
if err != nil {
201-
return err
202-
}
203-
_, avagoDir, err := binutils.SetupAvalanchego(app, avalancheGoVersion)
188+
// setup (install if needed) avalanchego binary
189+
avagoVersion := userProvidedAvagoVersion
190+
if userProvidedAvagoVersion == constants.DefaultAvalancheGoVersion && avagoBinaryPath == "" {
191+
// nothing given: get avago version from RPC compat
192+
avagoVersion, err = vm.GetLatestAvalancheGoByProtocolVersion(
193+
app,
194+
sidecar.RPCVersion,
195+
constants.AvalancheGoCompatibilityURL,
196+
)
204197
if err != nil {
205-
return fmt.Errorf("failed installing Avalanche Go version %s: %w", avalancheGoVersion, err)
198+
if err != vm.ErrNoAvagoVersion {
199+
return err
200+
}
201+
avagoVersion = constants.LatestPreReleaseVersionTag
206202
}
207-
avagoBinaryPath = filepath.Join(avagoDir, "avalanchego")
203+
}
204+
avagoBinaryPath, err := localnet.SetupAvalancheGoBinary(app, avagoVersion, avagoBinaryPath)
205+
if err != nil {
206+
return err
208207
}
209208
nodeConfig := map[string]interface{}{}
210209
if app.AvagoNodeConfigExists(blockchainName) {
@@ -535,7 +534,7 @@ func convertBlockchain(_ *cobra.Command, args []string) error {
535534
}
536535
}
537536
if !generateNodeID {
538-
if err = StartLocalMachine(network, blockchainName, deployBalance, availableBalance); err != nil {
537+
if err = StartLocalMachine(network, sidecar, blockchainName, deployBalance, availableBalance); err != nil {
539538
return err
540539
}
541540
}

cmd/blockchaincmd/deploy.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ func deployBlockchain(cmd *cobra.Command, args []string) error {
509509

510510
// check if blockchain rpc version matches what is currently running
511511
// for the case version or binary was provided
512-
_, _, networkRPCVersion, err := localnet.GetVersion()
512+
_, _, networkRPCVersion, err := localnet.GetLocalNetworkAvalancheGoVersion(app)
513513
if err != nil {
514514
return err
515515
}
@@ -526,7 +526,7 @@ func deployBlockchain(cmd *cobra.Command, args []string) error {
526526
if !sidecar.Sovereign {
527527
// sovereign blockchains are deployed into new local clusters,
528528
// non sovereign blockchains are deployed into the local network itself
529-
if b, err := networkcmd.AlreadyDeployed(blockchainName); err != nil {
529+
if b, err := localnet.BlockchainAlreadyDeployedOnLocalNetwork(app, blockchainName); err != nil {
530530
return err
531531
} else if b {
532532
return fmt.Errorf("blockchain %s has already been deployed", blockchainName)
@@ -590,7 +590,7 @@ func deployBlockchain(cmd *cobra.Command, args []string) error {
590590
}
591591
}
592592
if !generateNodeID {
593-
if err = StartLocalMachine(network, blockchainName, deployBalance, availableBalance); err != nil {
593+
if err = StartLocalMachine(network, sidecar, blockchainName, deployBalance, availableBalance); err != nil {
594594
return err
595595
}
596596
}
@@ -829,10 +829,12 @@ func deployBlockchain(cmd *cobra.Command, args []string) error {
829829
}
830830
if network.Kind == models.Local && !simulatedPublicNetwork() {
831831
ux.Logger.PrintToUser("")
832-
if err := networkcmd.TrackSubnet(
832+
ctx, cancel := localnet.GetLocalNetworkDefaultContext()
833+
defer cancel()
834+
if err := localnet.LocalNetworkTrackSubnet(
835+
ctx,
836+
app,
833837
blockchainName,
834-
avagoBinaryPath,
835-
sidecar.Sovereign,
836838
); err != nil {
837839
return err
838840
}

cmd/blockchaincmd/validators.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ func printValidatorsFromList(validators []platformvm.ClientPermissionlessValidat
106106

107107
table.Append([]string{
108108
validator.NodeID.String(),
109-
strconv.FormatUint(*validator.StakeAmount, 10),
109+
strconv.FormatUint(validator.Weight, 10),
110110
strconv.FormatUint(delegatorWeight, 10),
111111
formatUnixTime(validator.StartTime),
112112
formatUnixTime(validator.EndTime),

cmd/blockchaincmd/vmid.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import (
66
"fmt"
77

88
"github.com/ava-labs/avalanche-cli/pkg/cobrautils"
9+
"github.com/ava-labs/avalanche-cli/pkg/utils"
910
"github.com/ava-labs/avalanche-cli/pkg/ux"
10-
"github.com/ava-labs/avalanche-network-runner/utils"
1111
"github.com/spf13/cobra"
1212
)
1313

cmd/commands.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2067,7 +2067,7 @@ avalanche network start [subcommand] [flags]
20672067
--num-nodes uint32 number of nodes to be created on local network (default 2)
20682068
--relayer-path string use this relayer binary path
20692069
--relayer-version string use this relayer version (default "latest-prerelease")
2070-
--snapshot-name string name of snapshot to use to start the network from (default "default-1654102509")
2070+
--snapshot-name string name of snapshot to use to start the network from (default "default")
20712071
--config string config file (default is $HOME/.avalanche-cli/config.json)
20722072
--log-level string log level for the application (default "ERROR")
20732073
--skip-update-check skip check for new versions
@@ -2114,7 +2114,7 @@ avalanche network stop [subcommand] [flags]
21142114
```bash
21152115
--dont-save do not save snapshot, just stop the network
21162116
-h, --help help for stop
2117-
--snapshot-name string name of snapshot to use to save network state into (default "default-1654102509")
2117+
--snapshot-name string name of snapshot to use to save network state into (default "default")
21182118
--config string config file (default is $HOME/.avalanche-cli/config.json)
21192119
--log-level string log level for the application (default "ERROR")
21202120
--skip-update-check skip check for new versions

cmd/interchaincmd/messengercmd/deploy.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ func CallDeploy(_ []string, flags DeployFlags, network models.Network) error {
237237
if !alreadyDeployed {
238238
if network.Kind == models.Local {
239239
if err := localnet.WriteExtraLocalNetworkData(
240+
app,
240241
"",
241242
"",
242243
messengerAddress,

cmd/interchaincmd/relayercmd/deploy.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -430,11 +430,10 @@ func CallDeploy(_ []string, flags DeployFlags, network models.Network) error {
430430
storageDir := app.GetLocalRelayerStorageDir(network.Kind)
431431
localNetworkRootDir := ""
432432
if network.Kind == models.Local {
433-
clusterInfo, err := localnet.GetClusterInfo()
433+
localNetworkRootDir, err = localnet.GetLocalNetworkDir(app)
434434
if err != nil {
435435
return err
436436
}
437-
localNetworkRootDir = clusterInfo.GetRootDataDir()
438437
}
439438
configPath := app.GetLocalRelayerConfigPath(network.Kind, localNetworkRootDir)
440439
logPath := app.GetLocalRelayerLogPath(network.Kind)
@@ -509,7 +508,7 @@ func CallDeploy(_ []string, flags DeployFlags, network models.Network) error {
509508
return err
510509
}
511510
if network.Kind == models.Local {
512-
if err := localnet.WriteExtraLocalNetworkData("", binPath, "", ""); err != nil {
511+
if err := localnet.WriteExtraLocalNetworkData(app, "", binPath, "", ""); err != nil {
513512
return err
514513
}
515514
}

cmd/interchaincmd/relayercmd/start.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,14 @@ func start(_ *cobra.Command, _ []string) error {
8383
}
8484
localNetworkRootDir := ""
8585
if network.Kind == models.Local {
86-
clusterInfo, err := localnet.GetClusterInfo()
86+
localNetworkRootDir, err = localnet.GetLocalNetworkDir(app)
8787
if err != nil {
8888
return err
8989
}
90-
localNetworkRootDir = clusterInfo.GetRootDataDir()
9190
}
9291
relayerConfigPath := app.GetLocalRelayerConfigPath(network.Kind, localNetworkRootDir)
9392
if network.Kind == models.Local && binPath == "" {
94-
if b, extraLocalNetworkData, err := localnet.GetExtraLocalNetworkData(""); err != nil {
93+
if b, extraLocalNetworkData, err := localnet.GetExtraLocalNetworkData(app, ""); err != nil {
9594
return err
9695
} else if b {
9796
binPath = extraLocalNetworkData.RelayerPath
@@ -110,7 +109,7 @@ func start(_ *cobra.Command, _ []string) error {
110109
); err != nil {
111110
return err
112111
} else if network.Kind == models.Local {
113-
if err := localnet.WriteExtraLocalNetworkData("", binPath, "", ""); err != nil {
112+
if err := localnet.WriteExtraLocalNetworkData(app, "", binPath, "", ""); err != nil {
114113
return err
115114
}
116115
}

cmd/networkcmd/clean.go

Lines changed: 11 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,21 @@
33
package networkcmd
44

55
import (
6+
"errors"
67
"os"
78
"path/filepath"
8-
"regexp"
99

10-
"github.com/ava-labs/avalanche-cli/pkg/binutils"
1110
"github.com/ava-labs/avalanche-cli/pkg/cobrautils"
1211
"github.com/ava-labs/avalanche-cli/pkg/constants"
1312
"github.com/ava-labs/avalanche-cli/pkg/interchain"
13+
"github.com/ava-labs/avalanche-cli/pkg/localnet"
1414
"github.com/ava-labs/avalanche-cli/pkg/models"
1515
"github.com/ava-labs/avalanche-cli/pkg/node"
1616
"github.com/ava-labs/avalanche-cli/pkg/subnet"
1717
"github.com/ava-labs/avalanche-cli/pkg/ux"
18-
"github.com/shirou/gopsutil/process"
18+
"github.com/ava-labs/avalanchego/utils/logging"
19+
1920
"github.com/spf13/cobra"
20-
"go.uber.org/zap"
2121
)
2222

2323
var hard bool
@@ -44,16 +44,12 @@ configuration.`,
4444
}
4545

4646
func clean(*cobra.Command, []string) error {
47-
app.Log.Info("killing gRPC server process...")
48-
49-
if err := binutils.KillgRPCServerProcess(
50-
app,
51-
binutils.LocalNetworkGRPCServerEndpoint,
52-
constants.ServerRunFileLocalNetworkPrefix,
53-
); err != nil {
54-
app.Log.Warn("failed killing server process", zap.Error(err))
55-
} else {
47+
if err := localnet.LocalNetworkStop(app); err != nil && !errors.Is(err, localnet.ErrNetworkNotRunning) {
48+
return err
49+
} else if err == nil {
5650
ux.Logger.PrintToUser("Process terminated.")
51+
} else {
52+
ux.Logger.PrintToUser(logging.Red.Wrap("No network is running."))
5753
}
5854

5955
if err := interchain.RelayerCleanup(
@@ -68,7 +64,6 @@ func clean(*cobra.Command, []string) error {
6864
ux.Logger.PrintToUser("hard clean requested via flag, removing all downloaded avalanchego and plugin binaries")
6965
binDir := filepath.Join(app.GetBaseDir(), constants.AvalancheCliBinDir)
7066
cleanBins(binDir)
71-
_ = killAllBackendsByName()
7267
}
7368

7469
if err := app.ResetPluginsDir(); err != nil {
@@ -111,27 +106,7 @@ func removeLocalDeployInfoFromSidecars() error {
111106
func cleanBins(dir string) {
112107
if err := os.RemoveAll(dir); err != nil {
113108
ux.Logger.PrintToUser("Removal failed: %s", err)
109+
} else {
110+
ux.Logger.PrintToUser("All existing binaries removed.")
114111
}
115-
ux.Logger.PrintToUser("All existing binaries removed.")
116-
}
117-
118-
func killAllBackendsByName() error {
119-
procs, err := process.Processes()
120-
if err != nil {
121-
return err
122-
}
123-
regex := regexp.MustCompile(".* " + constants.BackendCmd + ".*")
124-
for _, p := range procs {
125-
name, err := p.Cmdline()
126-
if err != nil {
127-
// ignore errors for processes that just died (macos implementation)
128-
continue
129-
}
130-
if regex.MatchString(name) {
131-
if err := p.Terminate(); err != nil {
132-
return err
133-
}
134-
}
135-
}
136-
return nil
137112
}

0 commit comments

Comments
 (0)