diff --git a/cmd/consts/consts.go b/cmd/consts/consts.go index 429f1aa2..c8513295 100644 --- a/cmd/consts/consts.go +++ b/cmd/consts/consts.go @@ -126,8 +126,9 @@ const RollerConfigFileName = "roller.toml" type VMType string const ( - SDK_ROLLAPP VMType = "sdk" - EVM_ROLLAPP VMType = "evm" + SDK_ROLLAPP VMType = "sdk" + EVM_ROLLAPP VMType = "evm" + WASM_ROLLAPP VMType = "wasm" ) func ToVMType(s string) (VMType, error) { @@ -136,6 +137,8 @@ func ToVMType(s string) (VMType, error) { return SDK_ROLLAPP, nil case string(EVM_ROLLAPP): return EVM_ROLLAPP, nil + case string(WASM_ROLLAPP): + return WASM_ROLLAPP, nil default: return "", fmt.Errorf("invalid VMType: %s", s) } diff --git a/cmd/relayer/setup/setup.go b/cmd/relayer/setup/setup.go index d61bf42c..2c4c140a 100644 --- a/cmd/relayer/setup/setup.go +++ b/cmd/relayer/setup/setup.go @@ -81,6 +81,7 @@ func Cmd() *cobra.Command { home, rollappConfig.RollappID, &hd, + string(rollappConfig.VMType), ) errorhandling.PrettifyErrorIfExists(err) diff --git a/cmd/rollapp/init/init.go b/cmd/rollapp/init/init.go index 4cd9a948..1f0c6d03 100644 --- a/cmd/rollapp/init/init.go +++ b/cmd/rollapp/init/init.go @@ -83,7 +83,6 @@ func Cmd() *cobra.Command { ).Show() } - pterm.Info.Println("validating RollApp ID: ", raID) _, err = rollapp.ValidateChainID(raID) if err != nil { pterm.Error.Println("failed to validate chain id: ", err) @@ -93,7 +92,7 @@ func Cmd() *cobra.Command { if env == "mock" { vmtypes := []string{"evm", "wasm"} vmtype, _ := pterm.DefaultInteractiveSelect. - WithDefaultText("select the environment you want to initialize for"). + WithDefaultText("select the rollapp VM type you want to initialize for"). WithOptions(vmtypes). Show() err = dependencies.InstallBinaries(env, true, vmtype) @@ -101,7 +100,7 @@ func Cmd() *cobra.Command { pterm.Error.Println("failed to install binaries: ", err) return } - err := runInit(cmd, env, raID) + err := runInit(cmd, env, raID, vmtype) if err != nil { fmt.Println("failed to run init: ", err) return @@ -172,7 +171,7 @@ func Cmd() *cobra.Command { return } - err = runInit(cmd, env, raID) + err = runInit(cmd, env, raID, strings.ToLower(raResponse.Rollapp.VmType)) if err != nil { pterm.Error.Printf("failed to initialize the RollApp: %v\n", err) return diff --git a/cmd/rollapp/init/utils.go b/cmd/rollapp/init/utils.go index c67c184f..85d86449 100644 --- a/cmd/rollapp/init/utils.go +++ b/cmd/rollapp/init/utils.go @@ -32,7 +32,8 @@ import ( "github.com/dymensionxyz/roller/utils/sequencer" ) -func runInit(cmd *cobra.Command, env string, raID string) error { +// nolint: gocyclo +func runInit(cmd *cobra.Command, env, raID, vmType string) error { home, err := filesystem.ExpandHomePath(cmd.Flag(cmdutils.FlagNames.Home).Value.String()) if err != nil { pterm.Error.Println("failed to expand home directory") @@ -134,6 +135,7 @@ func runInit(cmd *cobra.Command, env string, raID string) error { home, raID, &hd, + vmType, ) if err != nil { errorhandling.PrettifyErrorIfExists(err) diff --git a/cmd/rollapp/sequencer/metadata/export/export.go b/cmd/rollapp/sequencer/metadata/export/export.go index 8cc96dd3..c8467fdc 100644 --- a/cmd/rollapp/sequencer/metadata/export/export.go +++ b/cmd/rollapp/sequencer/metadata/export/export.go @@ -51,6 +51,7 @@ func Cmd() *cobra.Command { home, rollerData.RollappID, &hd, + string(rollerData.VMType), ) errorhandling.PrettifyErrorIfExists(err) diff --git a/cmd/rollapp/setup/setup.go b/cmd/rollapp/setup/setup.go index 262db5eb..a5ab5964 100644 --- a/cmd/rollapp/setup/setup.go +++ b/cmd/rollapp/setup/setup.go @@ -80,6 +80,7 @@ func Cmd() *cobra.Command { home, rollerData.RollappID, &hd, + string(rollerData.VMType), ) errorhandling.PrettifyErrorIfExists(err) @@ -129,6 +130,13 @@ func Cmd() *cobra.Command { WithOptions(options). Show() + rollerConfigFilePath := filepath.Join(home, consts.RollerConfigFileName) + err = globalutils.UpdateFieldInToml(rollerConfigFilePath, "node_type", nodeType) + if err != nil { + pterm.Error.Println("failed to update node type in roller config file: ", err) + return + } + switch nodeType { case "sequencer": pterm.Info.Println("getting the existing sequencer address ") @@ -502,7 +510,6 @@ func Cmd() *cobra.Command { } // DA - oh := initconfig.NewOutputHandler(false) damanager := datalayer.NewDAManager(rollappConfig.DA.Backend, rollappConfig.Home) daHome := filepath.Join( damanager.GetRootDirectory(), @@ -516,27 +523,7 @@ func Cmd() *cobra.Command { var shouldOverwrite bool if isDaInitialized { - pterm.Info.Println("DA client is already initialized") - oh.StopSpinner() - shouldOverwrite, err = oh.PromptOverwriteConfig(daHome) - if err != nil { - return - } - } - - if shouldOverwrite { - pterm.Info.Println("overriding the existing da configuration") - err := os.RemoveAll(daHome) - if err != nil { - pterm.Error.Printf("failed to remove %s: %v\n", daHome, err) - return - } - - err = os.MkdirAll(daHome, 0o755) - if err != nil { - pterm.Error.Printf("failed to create %s: %v\n", daHome, err) - return - } + pterm.Warning.Println("DA client is already initialized") } if !isDaInitialized || shouldOverwrite { @@ -758,54 +745,6 @@ func Cmd() *cobra.Command { return cmd } -func printOutput(rlpCfg config.RollappConfig, cmd *exec.Cmd) { - seq := sequencer.GetInstance(rlpCfg) - pterm.DefaultSection.WithIndentCharacter("💈 "). - Println("The Rollapp sequencer is running on your local machine!") - fmt.Println("💈 Endpoints:") - - fmt.Printf("EVM RPC: http://127.0.0.1:%v\n", seq.JsonRPCPort) - fmt.Printf("Node RPC: http://127.0.0.1:%v\n", seq.RPCPort) - fmt.Printf("Rest API: http://127.0.0.1:%v\n", seq.APIPort) - - fmt.Println("💈 Log file path: ", LogPath) - fmt.Println("💈 Rollapp root dir: ", RollappDirPath) - fmt.Printf( - "💈 PID: %d (saved in %s)\n", - cmd.Process.Pid, - filepath.Join(rlpCfg.Home, "rollapputils.pid"), - ) -} - -func createPidFile(path string, cmd *exec.Cmd) error { - pidPath := filepath.Join(path, "rollapputils.pid") - file, err := os.Create(pidPath) - if err != nil { - fmt.Println("Error creating file:", err) - return err - } - // nolint errcheck - defer file.Close() - - pid := cmd.Process.Pid - _, err = file.WriteString(fmt.Sprintf("%d", pid)) - if err != nil { - fmt.Println("Error writing to file:", err) - return err - } - - return nil -} - -func parseError(errMsg string) string { - lines := strings.Split(errMsg, "\n") - if len(lines) > 0 && - lines[0] == "Error: failed to initialize database: resource temporarily unavailable" { - return "The Rollapp sequencer is already running on your local machine. Only one sequencer can run at any given time." - } - return errMsg -} - func populateSequencerMetadata(raCfg config.RollappConfig) error { cd := dymensionseqtypes.ContactDetails{ Website: "", diff --git a/cmd/rollapp/start/start.go b/cmd/rollapp/start/start.go index d1dc0313..73a058f7 100644 --- a/cmd/rollapp/start/start.go +++ b/cmd/rollapp/start/start.go @@ -67,7 +67,6 @@ Consider using 'services' if you want to run a 'systemd' service instead. LogPath = filepath.Join(rollappConfig.Home, consts.ConfigDirName.Rollapp, "rollapp.log") RollappDirPath = filepath.Join(rollappConfig.Home, consts.ConfigDirName.Rollapp) - fmt.Println(startRollappCmd.String()) ctx, cancel := context.WithCancel(context.Background()) defer cancel() go bash.RunCmdAsync( @@ -117,12 +116,15 @@ func PrintOutput( msg = pterm.DefaultBasicText.WithStyle( pterm. FgGreen.ToStyle(), - ).Sprintf("💈 The Rollapp sequencer is running on your local machine!") + ).Sprintf("💈 The Rollapp %s is running on your local machine!", rlpCfg.NodeType) } else { msg = pterm.DefaultBasicText.WithStyle( pterm. FgRed.ToStyle(), - ).Sprintf("❗ The Rollapp sequencer is in unhealthy state. Please check the logs for more information.") + ).Sprintf( + "❗ The Rollapp %s is in unhealthy state. Please check the logs for more information.", + rlpCfg.NodeType, + ) } fmt.Println(msg) @@ -135,7 +137,9 @@ func PrintOutput( if withEndpoints { pterm.DefaultSection.WithIndentCharacter("💈"). Println("Endpoints:") - fmt.Printf("EVM RPC: http://0.0.0.0:%v\n", seq.JsonRPCPort) + if rlpCfg.VMType == "evm" { + fmt.Printf("EVM RPC: http://0.0.0.0:%v\n", seq.JsonRPCPort) + } fmt.Printf("Node RPC: http://0.0.0.0:%v\n", seq.RPCPort) fmt.Printf("Rest API: http://0.0.0.0:%v\n", seq.APIPort) } @@ -159,7 +163,7 @@ func PrintOutput( pterm.DefaultSection.WithIndentCharacter("💈"). Println("Wallet Info:") fmt.Println("Sequencer Address:", seqAddrData[0].Address) - if withBalance { + if withBalance && rlpCfg.NodeType == "sequencer" { fmt.Println("Sequencer Balance:", seqAddrData[0].Balance.String()) go func() { for { diff --git a/utils/config/config.go b/utils/config/config.go index 670ba9a0..83c8f10f 100644 --- a/utils/config/config.go +++ b/utils/config/config.go @@ -6,9 +6,10 @@ import ( "strings" "unicode" + "github.com/pterm/pterm" + "github.com/dymensionxyz/roller/cmd/consts" globalutils "github.com/dymensionxyz/roller/utils" - "github.com/pterm/pterm" ) var SupportedDas = []consts.DAType{consts.Celestia, consts.Avail, consts.Local} @@ -20,6 +21,7 @@ type RollappConfig struct { RollappID string `toml:"rollapp_id"` RollappBinary string `toml:"rollapp_binary"` VMType consts.VMType `toml:"execution"` + NodeType string `toml:"node_type"` Denom string `toml:"denom"` // TokenSupply string Decimals uint diff --git a/utils/config/tomlconfig/toml.go b/utils/config/tomlconfig/toml.go index 848c4374..3ab5f1bd 100644 --- a/utils/config/tomlconfig/toml.go +++ b/utils/config/tomlconfig/toml.go @@ -64,9 +64,13 @@ func Load(path string) ([]byte, error) { func LoadRollappMetadataFromChain( home, raID string, - hd *consts.HubData, + hd *consts.HubData, vmType string, ) (*config.RollappConfig, error) { var cfg config.RollappConfig + vmt, err := consts.ToVMType(vmType) + if err != nil { + return nil, err + } if hd.ID == "mock" { cfg = config.RollappConfig{ Home: home, @@ -74,7 +78,7 @@ func LoadRollappMetadataFromChain( GenesisHash: "", GenesisUrl: "", RollappBinary: consts.Executables.RollappEVM, - VMType: consts.EVM_ROLLAPP, + VMType: vmt, Denom: "mock", Decimals: 18, HubData: *hd, diff --git a/utils/dependencies/dependencies.go b/utils/dependencies/dependencies.go index 755807b2..1be753b5 100644 --- a/utils/dependencies/dependencies.go +++ b/utils/dependencies/dependencies.go @@ -191,9 +191,9 @@ func InstallBinaries(bech32 string, withMockDA bool, vmType string) error { } } else if vmType == "wasm" { goreleaserDeps["rollapp"] = types.Dependency{ - Name: "rollapp-evm", + Name: "rollapp-wasm", Repository: "https://github.com/artemijspavlovs/rollapp-wasm", - Release: "v1.0.0-rc04-roller-02", + Release: "v1.0.0-rc04-roller-03", Binaries: []types.BinaryPathPair{ { Binary: "rollappd", @@ -228,7 +228,7 @@ func InstallBinaries(bech32 string, withMockDA bool, vmType string) error { func InstallBinaryFromRepo(dep types.Dependency, td string) error { spinner, _ := pterm.DefaultSpinner.Start( - fmt.Sprintf("Installing %s\n", dep.Name), + fmt.Sprintf("Installing %s", dep.Name), ) targetDir, err := os.MkdirTemp(os.TempDir(), td) if err != nil { @@ -294,7 +294,7 @@ func InstallBinaryFromRepo(dep types.Dependency, td string) error { func InstallBinaryFromRelease(dep types.Dependency) error { spinner, _ := pterm.DefaultSpinner.Start( - fmt.Sprintf("Installing %s\n", dep.Name), + fmt.Sprintf("Installing %s", dep.Name), ) goOs := strings.Title(runtime.GOOS) goArch := strings.ToLower(runtime.GOARCH) diff --git a/utils/filesystem/filesystem.go b/utils/filesystem/filesystem.go index 620ad554..21851c0e 100644 --- a/utils/filesystem/filesystem.go +++ b/utils/filesystem/filesystem.go @@ -76,7 +76,7 @@ func ExpandHomePath(path string) (string, error) { // TODO: download the file in chunks if possible func DownloadFile(url, fp string) error { spinner, _ := pterm.DefaultSpinner. - Start("Downloading file file from ", url) + Start(fmt.Sprintf("Downloading file from %s", url)) // nolint:gosec resp, err := http.Get(url) diff --git a/utils/genesis/genesis.go b/utils/genesis/genesis.go index 1f5df36e..ae1df098 100644 --- a/utils/genesis/genesis.go +++ b/utils/genesis/genesis.go @@ -12,6 +12,8 @@ import ( "strings" "github.com/cometbft/cometbft/types" + "github.com/pterm/pterm" + "github.com/dymensionxyz/roller/cmd/consts" "github.com/dymensionxyz/roller/utils/bash" "github.com/dymensionxyz/roller/utils/config" @@ -19,7 +21,6 @@ import ( "github.com/dymensionxyz/roller/utils/filesystem" "github.com/dymensionxyz/roller/utils/rollapp" "github.com/dymensionxyz/roller/utils/sequencer" - "github.com/pterm/pterm" ) type AppState struct { @@ -244,14 +245,13 @@ func UpdateGenesisParams(home string, raCfg *config.RollappConfig) error { func getDefaultGenesisParams( raCfg *config.RollappConfig, ) []config.PathValue { - return []config.PathValue{ + var params []config.PathValue + + commonParams := []config.PathValue{ {Path: "app_state.mint.params.mint_denom", Value: raCfg.BaseDenom}, {Path: "app_state.staking.params.bond_denom", Value: raCfg.BaseDenom}, - {Path: "app_state.evm.params.evm_denom", Value: raCfg.BaseDenom}, {Path: "app_state.gov.deposit_params.min_deposit.0.denom", Value: raCfg.BaseDenom}, {Path: "consensus_params.block.max_gas", Value: "40000000"}, - {Path: "app_state.feemarket.params.no_base_fee", Value: true}, - {Path: "app_state.feemarket.params.min_gas_price", Value: "0.0"}, {Path: "app_state.distribution.params.base_proposer_reward", Value: "0.8"}, {Path: "app_state.distribution.params.community_tax", Value: "0.00002"}, {Path: "app_state.gov.voting_params.voting_period", Value: "300s"}, @@ -260,9 +260,25 @@ func getDefaultGenesisParams( Path: "app_state.bank.denom_metadata", Value: getBankDenomMetadata(raCfg.BaseDenom, raCfg.Decimals), }, - {Path: "app_state.evm.params.extra_eips", Value: []string{"3855"}}, {Path: "app_state.claims.params.claims_denom", Value: raCfg.BaseDenom}, } + + if raCfg.VMType == consts.WASM_ROLLAPP { + wasmParams := []config.PathValue{} + params = append(commonParams, wasmParams...) + } + + if raCfg.VMType == consts.EVM_ROLLAPP { + evmParams := []config.PathValue{ + {Path: "app_state.evm.params.evm_denom", Value: raCfg.BaseDenom}, + {Path: "app_state.feemarket.params.no_base_fee", Value: true}, + {Path: "app_state.evm.params.extra_eips", Value: []string{"3855"}}, + {Path: "app_state.feemarket.params.min_gas_price", Value: "0.0"}, + } + params = append(commonParams, evmParams...) + } + + return params } func getBankDenomMetadata(denom string, decimals uint) []BankDenomMetadata { diff --git a/utils/rollapp/rollappId.go b/utils/rollapp/rollappId.go index de3973c2..1157f73a 100644 --- a/utils/rollapp/rollappId.go +++ b/utils/rollapp/rollappId.go @@ -45,7 +45,7 @@ type ChainID struct { // from Dymension source code `x/rollapp/types/chain_id.go` @20240911 func ValidateChainID(id string) (ChainID, error) { spinner, _ := pterm.DefaultSpinner.WithRemoveWhenDone(). - Start(fmt.Sprintf("validating rollapp id '%s'\n", id)) + Start(fmt.Sprintf("validating rollapp id '%s'", id)) chainID := strings.TrimSpace(id) if chainID == "" { @@ -92,7 +92,7 @@ func ValidateChainID(id string) (ChainID, error) { ) } - spinner.Success(fmt.Sprintf("'%s' is a valid RollApp ID", id)) + spinner.Success(fmt.Sprintf("'%s' is a valid RollApp ID\n", id)) return ChainID{ chainID: chainID, eip155ID: chainIDInt,