diff --git a/go.mod b/go.mod index faea3cc3..7e3137ae 100644 --- a/go.mod +++ b/go.mod @@ -39,7 +39,6 @@ require ( github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogoproto v1.4.11 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/deckarep/golang-set v1.8.0 // indirect github.com/docker/docker v24.0.7+incompatible github.com/docker/go-connections v0.4.0 // indirect github.com/go-ole/go-ole v1.2.6 // indirect diff --git a/tests/fullnode_sync_test.go b/tests/fullnode_sync_test.go index 1cf28921..34b294a7 100644 --- a/tests/fullnode_sync_test.go +++ b/tests/fullnode_sync_test.go @@ -53,246 +53,253 @@ func StartDA() { } } -// func TestFullnodeSync_EVM(t *testing.T) { -// if testing.Short() { -// t.Skip() -// } - -// ctx := context.Background() - -// go StartDA() - -// // setup config for rollapp 1 -// settlement_layer_rollapp1 := "dymension" -// settlement_node_address := fmt.Sprintf("http://dymension_100-1-val-0-%s:26657", t.Name()) -// rollapp1_id := "rollappevm_1234-1" -// gas_price_rollapp1 := "0adym" -// maxIdleTime1 := "5s" -// maxProofTime := "500ms" -// configFileOverrides := overridesDymintToml(settlement_layer_rollapp1, settlement_node_address, rollapp1_id, gas_price_rollapp1, maxIdleTime1, maxProofTime, "20s") - -// // Create chain factory with dymension -// numHubVals := 1 -// numHubFullNodes := 1 -// numRollAppVals := 1 -// numRollAppFn := 1 - -// cf := test.NewBuiltinChainFactory(zaptest.NewLogger(t), []*test.ChainSpec{ -// { -// Name: "rollapp1", -// ChainConfig: ibc.ChainConfig{ -// Type: "rollapp-dym", -// Name: "rollapp-temp", -// ChainID: "rollappevm_1234-1", -// Images: []ibc.DockerImage{rollappEVMImage}, -// Bin: "rollappd", -// Bech32Prefix: "ethm", -// Denom: "urax", -// CoinType: "60", -// GasPrices: "0.0urax", -// GasAdjustment: 1.1, -// TrustingPeriod: "112h", -// EncodingConfig: encodingConfig(), -// NoHostMount: false, -// ModifyGenesis: modifyRollappEVMGenesis(rollappEVMGenesisKV), -// ConfigFileOverrides: configFileOverrides, -// }, -// NumValidators: &numRollAppVals, -// NumFullNodes: &numRollAppFn, -// }, -// { -// Name: "dymension-hub", -// ChainConfig: customEpochConfig("5s"), -// NumValidators: &numHubVals, -// NumFullNodes: &numHubFullNodes, -// }, -// }) - -// // Get chains from the chain factory -// chains, err := cf.Chains(t.Name()) -// require.NoError(t, err) - -// rollapp1 := chains[0].(*dym_rollapp.DymRollApp) -// dymension := chains[1].(*dym_hub.DymHub) - -// // Relayer Factory -// client, network := test.DockerSetup(t) - -// ic := test.NewSetup(). -// AddRollUp(dymension, rollapp1) - -// rep := testreporter.NewNopReporter() -// eRep := rep.RelayerExecReporter(t) - -// err = ic.Build(ctx, eRep, test.InterchainBuildOptions{ -// TestName: t.Name(), -// Client: client, -// NetworkID: network, -// SkipPathCreation: true, - -// // This can be used to write to the block database which will index all block data e.g. txs, msgs, events, etc. -// // BlockDatabaseFile: test.DefaultBlockDatabaseFilepath(), -// }, nil, "", nil) -// require.NoError(t, err) - -// // Wait for rollapp finalized -// rollapp1Height, err := rollapp1.Validators[0].Height(ctx) -// require.NoError(t, err) -// isFinalized, err := dymension.WaitUntilRollappHeightIsFinalized(ctx, rollapp1.GetChainID(), rollapp1Height, 300) -// require.True(t, isFinalized) -// require.NoError(t, err) - -// // Stop the full node -// err = rollapp1.FullNodes[0].StopContainer(ctx) -// require.NoError(t, err) - -// // Wait for a few blocks before start the node again and sync -// err = testutil.WaitForBlocks(ctx, 50, dymension) -// require.NoError(t, err) - -// // Start full node again -// err = rollapp1.FullNodes[0].StartContainer(ctx) -// require.NoError(t, err) - -// // Poll until full node is sync -// err = testutil.WaitForCondition( -// time.Minute*50, -// time.Second*5, // each epoch is 5 seconds -// func() (bool, error) { -// valHeight, err := rollapp1.Validators[0].Height(ctx) -// require.NoError(t, err) - -// fullnodeHeight, err := rollapp1.FullNodes[0].Height(ctx) -// require.NoError(t, err) - -// fmt.Println("valHeight", valHeight, " || fullnodeHeight", fullnodeHeight) -// if valHeight > fullnodeHeight { -// return false, nil -// } - -// return true, nil -// }, -// ) -// require.NoError(t, err) -// } - -// func TestFullnodeSync_Wasm(t *testing.T) { -// if testing.Short() { -// t.Skip() -// } - -// ctx := context.Background() - -// configFileOverrides := make(map[string]any) -// dymintTomlOverrides := make(testutil.Toml) -// dymintTomlOverrides["settlement_layer"] = "dymension" -// dymintTomlOverrides["node_address"] = fmt.Sprintf("http://dymension_100-1-val-0-%s:26657", t.Name()) -// dymintTomlOverrides["rollapp_id"] = "rollappwasm_1234-1" -// dymintTomlOverrides["gas_prices"] = "0adym" -// dymintTomlOverrides["empty_blocks_max_time"] = "3s" - -// configFileOverrides["config/dymint.toml"] = dymintTomlOverrides -// // Create chain factory with dymension -// numHubVals := 1 -// numHubFullNodes := 1 -// numRollAppVals := 1 -// numRollAppFn := 1 - -// cf := test.NewBuiltinChainFactory(zaptest.NewLogger(t), []*test.ChainSpec{ -// { -// Name: "rollapp1", -// ChainConfig: ibc.ChainConfig{ -// Type: "rollapp-dym", -// Name: "rollapp-temp", -// ChainID: "rollappwasm_1234-1", -// Images: []ibc.DockerImage{rollappWasmImage}, -// Bin: "rollappd", -// Bech32Prefix: "rol", -// Denom: "urax", -// CoinType: "118", -// GasPrices: "0.0urax", -// GasAdjustment: 1.1, -// TrustingPeriod: "112h", -// EncodingConfig: encodingConfig(), -// NoHostMount: false, -// ModifyGenesis: nil, -// ConfigFileOverrides: configFileOverrides, -// }, -// NumValidators: &numRollAppVals, -// NumFullNodes: &numRollAppFn, -// }, -// { -// Name: "dymension-hub", -// ChainConfig: customEpochConfig("5s"), -// NumValidators: &numHubVals, -// NumFullNodes: &numHubFullNodes, -// }, -// }) - -// // Get chains from the chain factory -// chains, err := cf.Chains(t.Name()) -// require.NoError(t, err) - -// rollapp1 := chains[0].(*dym_rollapp.DymRollApp) -// dymension := chains[1].(*dym_hub.DymHub) - -// // Relayer Factory -// client, network := test.DockerSetup(t) - -// ic := test.NewSetup(). -// AddRollUp(dymension, rollapp1) - -// rep := testreporter.NewNopReporter() -// eRep := rep.RelayerExecReporter(t) - -// err = ic.Build(ctx, eRep, test.InterchainBuildOptions{ -// TestName: t.Name(), -// Client: client, -// NetworkID: network, -// SkipPathCreation: true, - -// // This can be used to write to the block database which will index all block data e.g. txs, msgs, events, etc. -// // BlockDatabaseFile: test.DefaultBlockDatabaseFilepath(), -// }, nil, "", nil) -// require.NoError(t, err) - -// // Wait for rollapp finalized -// rollapp1Height, err := rollapp1.Height(ctx) -// require.NoError(t, err) -// dymension.WaitUntilRollappHeightIsFinalized(ctx, rollapp1.GetChainID(), rollapp1Height, 300) - -// // Stop the full node -// err = rollapp1.FullNodes[0].StopContainer(ctx) -// require.NoError(t, err) - -// // Wait for a few blocks before start the node again and sync -// err = testutil.WaitForBlocks(ctx, 50, rollapp1) -// require.NoError(t, err) - -// // Start full node again -// err = rollapp1.FullNodes[0].StartContainer(ctx) -// require.NoError(t, err) - -// // Poll until full node is sync -// err = testutil.WaitForCondition( -// time.Minute*10, -// time.Second*5, // each epoch is 5 seconds -// func() (bool, error) { -// valHeight, err := rollapp1.Validators[0].Height(ctx) -// require.NoError(t, err) - -// fullnodeHeight, err := rollapp1.FullNodes[0].Height(ctx) -// require.NoError(t, err) - -// if valHeight > fullnodeHeight { -// return false, nil -// } - -// return true, nil -// }, -// ) -// require.NoError(t, err) -// } +func TestFullnodeSync_EVM(t *testing.T) { + if testing.Short() { + t.Skip() + } + + ctx := context.Background() + + go StartDA() + + // setup config for rollapp 1 + settlement_layer_rollapp1 := "dymension" + settlement_node_address := fmt.Sprintf("http://dymension_100-1-val-0-%s:26657", t.Name()) + rollapp1_id := "rollappevm_1234-1" + gas_price_rollapp1 := "0adym" + maxIdleTime1 := "5s" + maxProofTime := "500ms" + configFileOverrides := overridesDymintToml(settlement_layer_rollapp1, settlement_node_address, rollapp1_id, gas_price_rollapp1, maxIdleTime1, maxProofTime, "20s", true) + + // Create chain factory with dymension + numHubVals := 1 + numHubFullNodes := 1 + numRollAppVals := 1 + numRollAppFn := 1 + + cf := test.NewBuiltinChainFactory(zaptest.NewLogger(t), []*test.ChainSpec{ + { + Name: "rollapp1", + ChainConfig: ibc.ChainConfig{ + Type: "rollapp-dym", + Name: "rollapp-temp", + ChainID: "rollappevm_1234-1", + Images: []ibc.DockerImage{rollappEVMImage}, + Bin: "rollappd", + Bech32Prefix: "ethm", + Denom: "urax", + CoinType: "60", + GasPrices: "0.0urax", + GasAdjustment: 1.1, + TrustingPeriod: "112h", + EncodingConfig: encodingConfig(), + NoHostMount: false, + ModifyGenesis: modifyRollappEVMGenesis(rollappEVMGenesisKV), + ConfigFileOverrides: configFileOverrides, + }, + NumValidators: &numRollAppVals, + NumFullNodes: &numRollAppFn, + }, + { + Name: "dymension-hub", + ChainConfig: customEpochConfig("5s"), + NumValidators: &numHubVals, + NumFullNodes: &numHubFullNodes, + }, + }) + + // Get chains from the chain factory + chains, err := cf.Chains(t.Name()) + require.NoError(t, err) + + rollapp1 := chains[0].(*dym_rollapp.DymRollApp) + dymension := chains[1].(*dym_hub.DymHub) + + // Relayer Factory + client, network := test.DockerSetup(t) + + ic := test.NewSetup(). + AddRollUp(dymension, rollapp1) + + rep := testreporter.NewNopReporter() + eRep := rep.RelayerExecReporter(t) + + err = ic.Build(ctx, eRep, test.InterchainBuildOptions{ + TestName: t.Name(), + Client: client, + NetworkID: network, + SkipPathCreation: true, + + // This can be used to write to the block database which will index all block data e.g. txs, msgs, events, etc. + // BlockDatabaseFile: test.DefaultBlockDatabaseFilepath(), + }, nil, "", nil) + require.NoError(t, err) + + // Wait for rollapp finalized + rollapp1Height, err := rollapp1.Validators[0].Height(ctx) + require.NoError(t, err) + isFinalized, err := dymension.WaitUntilRollappHeightIsFinalized(ctx, rollapp1.GetChainID(), rollapp1Height, 300) + require.True(t, isFinalized) + require.NoError(t, err) + + // Stop the full node + err = rollapp1.FullNodes[0].StopContainer(ctx) + require.NoError(t, err) + + // Wait for a few blocks before start the node again and sync + err = testutil.WaitForBlocks(ctx, 50, dymension) + require.NoError(t, err) + + // Start full node again + err = rollapp1.FullNodes[0].StartContainer(ctx) + require.NoError(t, err) + + // Poll until full node is sync + err = testutil.WaitForCondition( + time.Minute*50, + time.Second*5, // each epoch is 5 seconds + func() (bool, error) { + valHeight, err := rollapp1.Validators[0].Height(ctx) + require.NoError(t, err) + + fullnodeHeight, err := rollapp1.FullNodes[0].Height(ctx) + require.NoError(t, err) + + fmt.Println("valHeight", valHeight, " || fullnodeHeight", fullnodeHeight) + if valHeight > fullnodeHeight { + return false, nil + } + + return true, nil + }, + ) + require.NoError(t, err) +} + +func TestFullnodeSync_Wasm(t *testing.T) { + if testing.Short() { + t.Skip() + } + + ctx := context.Background() + + // start grpc DA + go StartDA() + + configFileOverrides := make(map[string]any) + dymintTomlOverrides := make(testutil.Toml) + dymintTomlOverrides["settlement_layer"] = "dymension" + dymintTomlOverrides["node_address"] = fmt.Sprintf("http://dymension_100-1-val-0-%s:26657", t.Name()) + dymintTomlOverrides["rollapp_id"] = "rollappwasm_1234-1" + dymintTomlOverrides["gas_prices"] = "0adym" + dymintTomlOverrides["empty_blocks_max_time"] = "3s" + dymintTomlOverrides["da_layer"] = "grpc" + dymintTomlOverrides["da_config"] = "{\"host\":\"host.docker.internal\",\"port\": 7980}" + + configFileOverrides["config/dymint.toml"] = dymintTomlOverrides + // Create chain factory with dymension + numHubVals := 1 + numHubFullNodes := 1 + numRollAppVals := 1 + numRollAppFn := 1 + + cf := test.NewBuiltinChainFactory(zaptest.NewLogger(t), []*test.ChainSpec{ + { + Name: "rollapp1", + ChainConfig: ibc.ChainConfig{ + Type: "rollapp-dym", + Name: "rollapp-temp", + ChainID: "rollappwasm_1234-1", + Images: []ibc.DockerImage{rollappWasmImage}, + Bin: "rollappd", + Bech32Prefix: "rol", + Denom: "urax", + CoinType: "118", + GasPrices: "0.0urax", + GasAdjustment: 1.1, + TrustingPeriod: "112h", + EncodingConfig: encodingConfig(), + NoHostMount: false, + ModifyGenesis: nil, + ConfigFileOverrides: configFileOverrides, + }, + NumValidators: &numRollAppVals, + NumFullNodes: &numRollAppFn, + }, + { + Name: "dymension-hub", + ChainConfig: customEpochConfig("5s"), + NumValidators: &numHubVals, + NumFullNodes: &numHubFullNodes, + }, + }) + + // Get chains from the chain factory + chains, err := cf.Chains(t.Name()) + require.NoError(t, err) + + rollapp1 := chains[0].(*dym_rollapp.DymRollApp) + dymension := chains[1].(*dym_hub.DymHub) + + // Relayer Factory + client, network := test.DockerSetup(t) + + ic := test.NewSetup(). + AddRollUp(dymension, rollapp1) + + rep := testreporter.NewNopReporter() + eRep := rep.RelayerExecReporter(t) + + err = ic.Build(ctx, eRep, test.InterchainBuildOptions{ + TestName: t.Name(), + Client: client, + NetworkID: network, + SkipPathCreation: true, + + // This can be used to write to the block database which will index all block data e.g. txs, msgs, events, etc. + // BlockDatabaseFile: test.DefaultBlockDatabaseFilepath(), + }, nil, "", nil) + require.NoError(t, err) + + // Wait for rollapp finalized + rollapp1Height, err := rollapp1.Height(ctx) + require.NoError(t, err) + isFinalized, err := dymension.WaitUntilRollappHeightIsFinalized(ctx, rollapp1.GetChainID(), rollapp1Height, 300) + require.True(t, isFinalized) + require.NoError(t, err) + + // Stop the full node + err = rollapp1.FullNodes[0].StopContainer(ctx) + require.NoError(t, err) + + // Wait for a few blocks before start the node again and sync + err = testutil.WaitForBlocks(ctx, 50, rollapp1) + require.NoError(t, err) + + // Start full node again + err = rollapp1.FullNodes[0].StartContainer(ctx) + require.NoError(t, err) + + // Poll until full node is sync + err = testutil.WaitForCondition( + time.Minute*10, + time.Second*5, // each epoch is 5 seconds + func() (bool, error) { + valHeight, err := rollapp1.Validators[0].Height(ctx) + require.NoError(t, err) + + fullnodeHeight, err := rollapp1.FullNodes[0].Height(ctx) + require.NoError(t, err) + + if valHeight > fullnodeHeight { + return false, nil + } + + return true, nil + }, + ) + require.NoError(t, err) +} // TestFullnodeSync_Celestia_EVM tests the synchronization of a fullnode using Celestia as DA. func TestFullnodeSync_Celestia_EVM(t *testing.T) { diff --git a/tests/setup.go b/tests/setup.go index 16c549c4..c5b292df 100644 --- a/tests/setup.go +++ b/tests/setup.go @@ -611,12 +611,23 @@ type rollappParam struct { // require.Equal(t, string(deployerWhitelistParams), newParams.Value) // } -func overridesDymintToml(settlemenLayer, nodeAddress, rollappId, gasPrices, maxIdleTime, maxProofTime, batchSubmitMaxTime string) map[string]any { +func overridesDymintToml(settlemenLayer, nodeAddress, rollappId, gasPrices, maxIdleTime, maxProofTime, batchSubmitMaxTime string, optionalConfigs ...bool) map[string]any { configFileOverrides := make(map[string]any) dymintTomlOverrides := make(testutil.Toml) - dymintTomlOverrides["da_layer"] = "grpc" - dymintTomlOverrides["da_config"] = "{\"host\":\"host.docker.internal\",\"port\": 7980}" + // Default values for optional fields + includeDaGrpcLayer := false + + // Check if any options were passed and update the optional fields + if len(optionalConfigs) > 0 { + includeDaGrpcLayer = optionalConfigs[0] + } + + if includeDaGrpcLayer { + dymintTomlOverrides["da_layer"] = "grpc" + dymintTomlOverrides["da_config"] = "{\"host\":\"host.docker.internal\",\"port\": 7980}" + } + dymintTomlOverrides["settlement_layer"] = settlemenLayer dymintTomlOverrides["settlement_node_address"] = nodeAddress dymintTomlOverrides["rollapp_id"] = rollappId