Skip to content

Commit 0c2d1cd

Browse files
authored
fix: get drs from param on-chain instead of genesis (#1428)
1 parent 6a6b65a commit 0c2d1cd

File tree

6 files changed

+115
-40
lines changed

6 files changed

+115
-40
lines changed

cmd/relayer/setup/setup.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import (
1717
"github.com/dymensionxyz/roller/utils/errorhandling"
1818
"github.com/dymensionxyz/roller/utils/filesystem"
1919
firebaseutils "github.com/dymensionxyz/roller/utils/firebase"
20-
"github.com/dymensionxyz/roller/utils/genesis"
2120
"github.com/dymensionxyz/roller/utils/logging"
2221
relayerutils "github.com/dymensionxyz/roller/utils/relayer"
2322
"github.com/dymensionxyz/roller/utils/rollapp"
@@ -74,7 +73,7 @@ func Cmd() *cobra.Command {
7473
}
7574
pterm.Info.Println("rollapp chain data validation passed")
7675

77-
err = installRelayerDependencies(home, rly.Rollapp.ID, *hd)
76+
err = installRelayerDependencies(rly.Rollapp.ID, *hd)
7877
if err != nil {
7978
pterm.Error.Println("failed to install relayer dependencies: ", err)
8079
return
@@ -278,7 +277,6 @@ func getPreRunInfo(home string) (*consts.RollappData, *consts.HubData, string, e
278277
}
279278

280279
func installRelayerDependencies(
281-
home string,
282280
raID string,
283281
hd consts.HubData,
284282
) error {
@@ -287,9 +285,9 @@ func installRelayerDependencies(
287285
return err
288286
}
289287

290-
drsVersion, err := genesis.GetDrsVersionFromGenesis(home, raResp)
288+
drsVersion, err := rollapp.GetDrsVersionFromChain(raID, hd)
291289
if err != nil {
292-
pterm.Error.Println("failed to get drs version from genesis: ", err)
290+
pterm.Error.Println("failed to get drs version from rollapp: ", err)
293291
return err
294292
}
295293

cmd/rollapp/init/init.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ func Cmd() *cobra.Command {
225225
}
226226

227227
if !shouldSkipBinaryInstallation {
228-
_, _, err = dependencies.InstallBinaries(true, raRespMock, env)
228+
_, _, err = dependencies.InstallBinaries(true, raRespMock, hd, env)
229229
if err != nil {
230230
pterm.Error.Println("failed to install binaries: ", err)
231231
return
@@ -308,7 +308,7 @@ func Cmd() *cobra.Command {
308308
}
309309

310310
start := time.Now()
311-
builtDeps, _, err := dependencies.InstallBinaries(false, *raResponse, env)
311+
builtDeps, _, err := dependencies.InstallBinaries(false, *raResponse, hd, env)
312312
if err != nil {
313313
pterm.Error.Println("failed to install binaries: ", err)
314314
return

cmd/rollapp/setup/setup.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1029,14 +1029,14 @@ func Cmd() *cobra.Command {
10291029
_ = tomlconfig.UpdateFieldInFile(
10301030
dymintConfigPath,
10311031
"da_layer",
1032-
getDaLayer(home, raResponse, damanager.DaType),
1032+
getDaLayer(rollappConfig.RollappID, rollappConfig.HubData, raResponse, damanager.DaType),
10331033
)
10341034

10351035
if !skipDA {
10361036
_ = tomlconfig.UpdateFieldInFile(
10371037
dymintConfigPath,
10381038
"da_config",
1039-
getDaConfig(damanager.DataLayer, nodeType, home, raResponse, rollappConfig),
1039+
getDaConfig(damanager.DataLayer, nodeType, raResponse, rollappConfig),
10401040
)
10411041
}
10421042

@@ -1361,10 +1361,10 @@ func displayRegularDenom(coin cosmossdktypes.Coin, decimals int) string {
13611361
return formattedAmount
13621362
}
13631363

1364-
func getDaLayer(home string, raResponse *rollapp.ShowRollappResponse, daType consts.DAType) any {
1365-
drsVersion, err := genesis.GetDrsVersionFromGenesis(home, raResponse)
1364+
func getDaLayer(raID string, hd consts.HubData, raResponse *rollapp.ShowRollappResponse, daType consts.DAType) any {
1365+
drsVersion, err := rollapp.GetDrsVersionFromChain(raID, hd)
13661366
if err != nil {
1367-
pterm.Error.Println("failed to get drs version from genesis: ", err)
1367+
pterm.Error.Println("failed to get drs version from rollapp: ", err)
13681368
return nil
13691369
}
13701370

@@ -1378,15 +1378,14 @@ func getDaLayer(home string, raResponse *rollapp.ShowRollappResponse, daType con
13781378
func getDaConfig(
13791379
dataLayer datalayer.DataLayer,
13801380
nodeType string,
1381-
home string,
13821381
raResponse *rollapp.ShowRollappResponse,
13831382
rollappConfig *roller.RollappConfig,
13841383
) any {
13851384
daConfig := dataLayer.GetSequencerDAConfig(nodeType)
13861385

1387-
drsVersion, err := genesis.GetDrsVersionFromGenesis(home, raResponse)
1386+
drsVersion, err := rollapp.GetDrsVersionFromChain(rollappConfig.RollappID, rollappConfig.HubData)
13881387
if err != nil {
1389-
pterm.Error.Println("failed to get drs version from genesis: ", err)
1388+
pterm.Error.Println("failed to get drs version from rollapp: ", err)
13901389
return nil
13911390
}
13921391

utils/dependencies/dependencies.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"os/exec"
1010
"path/filepath"
1111
"runtime"
12-
"strconv"
1312
"strings"
1413

1514
"github.com/pterm/pterm"
@@ -27,7 +26,7 @@ import (
2726
"github.com/dymensionxyz/roller/utils/rollapp"
2827
)
2928

30-
func InstallBinaries(withMockDA bool, raResp rollapp.ShowRollappResponse, env string) (
29+
func InstallBinaries(withMockDA bool, raResp rollapp.ShowRollappResponse, hd consts.HubData, env string) (
3130
map[string]types.Dependency,
3231
map[string]types.Dependency,
3332
error,
@@ -66,8 +65,13 @@ func InstallBinaries(withMockDA bool, raResp rollapp.ShowRollappResponse, env st
6665
}
6766

6867
da = as.RollappParams.Params.Da
69-
drsVersion = strconv.Itoa(as.RollappParams.Params.DrsVersion)
70-
pterm.Info.Println("RollApp drs version from the genesis file : ", drsVersion)
68+
69+
drsVersion, err = rollapp.GetDrsVersionFromChain(raResp.Rollapp.RollappId, hd)
70+
if err != nil {
71+
return nil, nil, fmt.Errorf("failed to retrieve rollapp drs version from chain: %w", err)
72+
}
73+
pterm.Info.Println("RollApp drs version fetched from chain: ", drsVersion)
74+
7175
drsInfo, err := firebaseutils.GetLatestDrsVersionCommit(drsVersion, env)
7276
if err != nil {
7377
return nil, nil, err

utils/genesis/genesis.go

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"os/exec"
1414
"path/filepath"
1515
"sort"
16-
"strconv"
1716
"strings"
1817

1918
comettypes "github.com/cometbft/cometbft/types"
@@ -462,23 +461,3 @@ func ValidateGenesis(raCfg roller.RollappConfig, raID string, hd consts.HubData)
462461

463462
return nil
464463
}
465-
466-
func GetDrsVersionFromGenesis(
467-
home string,
468-
raResp *rollapp.ShowRollappResponse,
469-
) (string, error) {
470-
err := DownloadGenesis(home, raResp.Rollapp.Metadata.GenesisUrl)
471-
if err != nil {
472-
return "", err
473-
}
474-
475-
as, err := GetAppStateFromGenesisFile(home)
476-
if err != nil {
477-
pterm.Error.Println("failed to get genesis app state: ", err)
478-
return "", err
479-
}
480-
drsVersion := strconv.Itoa(as.RollappParams.Params.DrsVersion)
481-
482-
pterm.Info.Println("DRS version: ", drsVersion)
483-
return drsVersion, nil
484-
}

utils/rollapp/rollapp.go

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"os"
88
"os/exec"
99
"path/filepath"
10+
"strconv"
1011
"strings"
1112

1213
cosmossdktypes "github.com/cosmos/cosmos-sdk/types"
@@ -17,6 +18,7 @@ import (
1718
datalayer "github.com/dymensionxyz/roller/data_layer"
1819
"github.com/dymensionxyz/roller/utils/bash"
1920
bashutils "github.com/dymensionxyz/roller/utils/bash"
21+
"github.com/dymensionxyz/roller/utils/config"
2022
"github.com/dymensionxyz/roller/utils/filesystem"
2123
"github.com/dymensionxyz/roller/utils/keys"
2224
"github.com/dymensionxyz/roller/utils/roller"
@@ -374,6 +376,99 @@ func GetRollappParams(hd consts.HubData) (*RaParams, error) {
374376
return &resp, nil
375377
}
376378

379+
func GetDrsVersionFromChain(rollappID string, hd consts.HubData) (string, error) {
380+
rpc, err := fetchRollappRpcFromChain(rollappID, hd)
381+
if err != nil {
382+
return "", err
383+
}
384+
385+
params, err := getRollappParamsFromNode(rpc, rollappID)
386+
if err != nil {
387+
return "", err
388+
}
389+
if params == nil {
390+
return "", errors.New("rollapp params response is nil")
391+
}
392+
return strconv.Itoa(params.DrsVersion), nil
393+
}
394+
395+
type RollappDaemonParams struct {
396+
Da string `json:"da"`
397+
DrsVersion int `json:"drs_version"`
398+
MinGasPrices cosmossdktypes.DecCoins `json:"min_gas_prices"`
399+
}
400+
401+
func getRollappParamsFromNode(rpcEndpoint, chainID string) (*RollappDaemonParams, error) {
402+
rpc := strings.TrimSpace(rpcEndpoint)
403+
if rpc == "" {
404+
rpc = consts.DefaultRollappRPC
405+
}
406+
args := []string{"q", "rollappparams", "params", "--node", rpc, "-o", "json"}
407+
if chainID != "" {
408+
args = append(args, "--chain-id", chainID)
409+
}
410+
411+
cmd := exec.Command(consts.Executables.RollappEVM, args...)
412+
out, err := bash.ExecCommandWithStdout(cmd)
413+
if err != nil {
414+
return nil, err
415+
}
416+
var resp RollappDaemonParams
417+
if err := json.Unmarshal(out.Bytes(), &resp); err != nil {
418+
return nil, err
419+
}
420+
return &resp, nil
421+
}
422+
423+
func fetchRollappRpcFromChain(raID string, hd consts.HubData) (string, error) {
424+
proposer, err := GetCurrentProposer(raID, hd)
425+
if err != nil {
426+
return "", err
427+
}
428+
if proposer == "" {
429+
return "", errors.New("no proposer found for rollapp")
430+
}
431+
432+
cmd := exec.Command(
433+
consts.Executables.Dymension,
434+
"q", "sequencer", "show-sequencer",
435+
proposer, "-o", "json", "--node", hd.RpcUrl, "--chain-id", hd.ID,
436+
)
437+
438+
out, err := bash.ExecCommandWithStdout(cmd)
439+
if err != nil {
440+
return "", err
441+
}
442+
443+
var resp struct {
444+
Sequencer struct {
445+
Metadata struct {
446+
Rpcs []string `json:"rpcs"`
447+
} `json:"metadata"`
448+
} `json:"sequencer"`
449+
}
450+
451+
if err := json.Unmarshal(out.Bytes(), &resp); err != nil {
452+
return "", err
453+
}
454+
455+
if len(resp.Sequencer.Metadata.Rpcs) == 0 {
456+
return "", errors.New("no rpc endpoints found in sequencer metadata")
457+
}
458+
459+
rpc := strings.TrimSpace(resp.Sequencer.Metadata.Rpcs[0])
460+
if rpc == "" {
461+
return "", errors.New("empty rpc endpoint in sequencer metadata")
462+
}
463+
464+
if !strings.HasPrefix(rpc, "http://") && !strings.HasPrefix(rpc, "https://") {
465+
rpc = "https://" + rpc
466+
}
467+
rpc = config.AddHttpsPortIfNeeded(rpc)
468+
469+
return rpc, nil
470+
}
471+
377472
func getGenesisFilePath(root string) string {
378473
return filepath.Join(
379474
RollappConfigDir(root),

0 commit comments

Comments
 (0)