From f91748383adcd77a50b59d4f36044e0b6831ff89 Mon Sep 17 00:00:00 2001 From: Callum Waters Date: Wed, 25 Sep 2024 23:01:27 +0200 Subject: [PATCH 01/31] attempt to add a major upgrade 3 test --- pkg/appconsts/global_consts.go | 2 +- test/e2e/major_upgrade_v2.go | 2 +- test/e2e/major_upgrade_v3.go | 89 +++++++++++++++++++++++++ test/e2e/minor_version_compatibility.go | 2 +- test/e2e/simple.go | 2 +- test/e2e/testnet/testnet.go | 5 +- test/e2e/testnet/txsimNode.go | 14 ++++ 7 files changed, 110 insertions(+), 6 deletions(-) create mode 100644 test/e2e/major_upgrade_v3.go diff --git a/pkg/appconsts/global_consts.go b/pkg/appconsts/global_consts.go index 2903da0414..2bd69e38dc 100644 --- a/pkg/appconsts/global_consts.go +++ b/pkg/appconsts/global_consts.go @@ -30,7 +30,7 @@ const ( // DefaultUpgradeHeightDelay is the number of blocks after a quorum has been // reached that the chain should upgrade to the new version. Assuming a block // interval of 12 seconds, this is 7 days. - DefaultUpgradeHeightDelay = int64(7 * 24 * 60 * 60 / 12) // 7 days * 24 hours * 60 minutes * 60 seconds / 12 seconds per block = 50,400 blocks. + DefaultUpgradeHeightDelay = 1 //int64(7 * 24 * 60 * 60 / 12) // 7 days * 24 hours * 60 minutes * 60 seconds / 12 seconds per block = 50,400 blocks. ) var ( diff --git a/test/e2e/major_upgrade_v2.go b/test/e2e/major_upgrade_v2.go index db21d65306..bfc6c3edbb 100644 --- a/test/e2e/major_upgrade_v2.go +++ b/test/e2e/major_upgrade_v2.go @@ -49,7 +49,7 @@ func MajorUpgradeToV2(logger *log.Logger) error { logger.Println("Creating txsim") endpoints, err := testNet.RemoteGRPCEndpoints(ctx) testnet.NoError("failed to get remote gRPC endpoints", err) - err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0]) + err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnet") diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go new file mode 100644 index 0000000000..efad77e808 --- /dev/null +++ b/test/e2e/major_upgrade_v3.go @@ -0,0 +1,89 @@ +//nolint:staticcheck +package main + +import ( + "context" + "fmt" + "log" + "time" + + "github.com/celestiaorg/celestia-app/v3/app" + v2 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v2" + v3 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v3" + "github.com/celestiaorg/celestia-app/v3/test/e2e/testnet" +) + +func MajorUpgradeToV3(logger *log.Logger) error { + numNodes := 4 + upgradeHeight := int64(10) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + logger.Println("Creating testnet") + testNet, err := testnet.New(ctx, "runMajorUpgradeToV3", seed, nil, "test") + testnet.NoError("failed to create testnet", err) + + defer testNet.Cleanup(ctx) + + latestVersion, err := testnet.GetLatestVersion() + testnet.NoError("failed to get latest version", err) + + logger.Println("Running major upgrade to v3 test", "version", latestVersion) + + cp := app.DefaultConsensusParams() + cp.Version.AppVersion = v2.Version + testNet.SetConsensusParams(cp) + + preloader, err := testNet.NewPreloader() + testnet.NoError("failed to create preloader", err) + + defer func() { _ = preloader.EmptyImages(ctx) }() + testnet.NoError("failed to add image", preloader.AddImage(ctx, testnet.DockerImageName(latestVersion))) + + logger.Println("Creating genesis nodes") + for i := 0; i < numNodes; i++ { + err := testNet.CreateGenesisNode(ctx, latestVersion, 10000000, upgradeHeight, testnet.DefaultResources, true) + testnet.NoError("failed to create genesis node", err) + } + + logger.Println("Creating txsim") + endpoints, err := testNet.RemoteGRPCEndpoints(ctx) + testnet.NoError("failed to get remote gRPC endpoints", err) + upgradeSchedule := map[int64]uint64{ + upgradeHeight: v3.Version, + } + err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule) + testnet.NoError("failed to create tx client", err) + + logger.Println("Setting up testnet") + testnet.NoError("Failed to setup testnet", testNet.Setup(ctx)) + logger.Println("Starting testnet") + testnet.NoError("Failed to start testnet", testNet.Start(ctx)) + + for _, node := range testNet.Nodes() { + client, err := node.Client() + testnet.NoError("failed to get client", err) + timer := time.NewTimer(time.Minute) + ticker := time.NewTicker(3 * time.Second) + + upgradeComplete := false + for !upgradeComplete { + lastHeight := int64(0) + select { + case <-timer.C: + return fmt.Errorf("failed to upgrade to v3, last height: %d", lastHeight) + case <-ticker.C: + resp, err := client.Header(ctx, nil) + testnet.NoError("failed to get header", err) + if resp.Header.Version.App == v3.Version { + upgradeComplete = true + } + lastHeight = resp.Header.Height + } + } + timer.Stop() + ticker.Stop() + } + + return nil +} diff --git a/test/e2e/minor_version_compatibility.go b/test/e2e/minor_version_compatibility.go index c13d93f23c..55690c43fd 100644 --- a/test/e2e/minor_version_compatibility.go +++ b/test/e2e/minor_version_compatibility.go @@ -62,7 +62,7 @@ func MinorVersionCompatibility(logger *log.Logger) error { logger.Println("Creating txsim") endpoints, err := testNet.RemoteGRPCEndpoints(ctx) testnet.NoError("failed to get remote gRPC endpoints", err) - err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0]) + err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil) testnet.NoError("failed to create tx client", err) // start the testnet diff --git a/test/e2e/simple.go b/test/e2e/simple.go index 7999c726a0..85e4bc31dd 100644 --- a/test/e2e/simple.go +++ b/test/e2e/simple.go @@ -34,7 +34,7 @@ func E2ESimple(logger *log.Logger) error { endpoints, err := testNet.RemoteGRPCEndpoints(ctx) testnet.NoError("failed to get remote gRPC endpoints", err) err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 10, - "100-2000", 100, testnet.DefaultResources, endpoints[0]) + "100-2000", 100, testnet.DefaultResources, endpoints[0], nil) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnets") diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index c04c723b73..82d1116038 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -114,7 +114,7 @@ func (t *Testnet) CreateTxClients(ctx context.Context, for i, grpcEndpoint := range grpcEndpoints { name := fmt.Sprintf("txsim%d", i) err := t.CreateTxClient(ctx, name, version, sequences, - blobRange, blobPerSequence, resources, grpcEndpoint) + blobRange, blobPerSequence, resources, grpcEndpoint, nil) if err != nil { log.Err(err).Str("name", name). Str("grpc endpoint", grpcEndpoint). @@ -147,6 +147,7 @@ func (t *Testnet) CreateTxClient( blobPerSequence int, resources Resources, grpcEndpoint string, + upgradeSchedule map[int64]uint64, ) error { // create an account, and store it in a temp directory and add the account as genesis account to // the testnet @@ -162,7 +163,7 @@ func (t *Testnet) CreateTxClient( // Create a txsim node using the key stored in the txsimKeyringDir txsim, err := CreateTxClient(ctx, name, version, grpcEndpoint, t.seed, - sequences, blobRange, blobPerSequence, 1, resources, txsimRootDir, t.knuu) + sequences, blobRange, blobPerSequence, 1, resources, txsimRootDir, t.knuu, upgradeSchedule) if err != nil { log.Err(err). Str("name", name). diff --git a/test/e2e/testnet/txsimNode.go b/test/e2e/testnet/txsimNode.go index 25a17f6d15..a8796244e5 100644 --- a/test/e2e/testnet/txsimNode.go +++ b/test/e2e/testnet/txsimNode.go @@ -4,6 +4,7 @@ package testnet import ( "context" "fmt" + "strings" "github.com/celestiaorg/knuu/pkg/instance" "github.com/celestiaorg/knuu/pkg/knuu" @@ -35,6 +36,7 @@ func CreateTxClient( resources Resources, volumePath string, knuu *knuu.Knuu, + upgradeSchedule map[int64]uint64, ) (*TxSim, error) { txIns, err := knuu.NewInstance(name) if err != nil { @@ -72,6 +74,7 @@ func CreateTxClient( fmt.Sprintf("-blob %d ", sequences), fmt.Sprintf("-blob-amounts %d ", blobsPerSeq), fmt.Sprintf("-blob-sizes %s ", blobRange), + fmt.Sprintf("-upgrade-schedule %s ", stringifyUpgradeSchedule(upgradeSchedule)), } if err := txIns.Build().SetArgs(args...); err != nil { @@ -83,3 +86,14 @@ func CreateTxClient( Instance: txIns, }, nil } + +func stringifyUpgradeSchedule(schedule map[int64]uint64) string { + if schedule == nil { + return "" + } + scheduleParts := make([]string, 0, len(schedule)) + for height, version := range schedule { + scheduleParts = append(scheduleParts, fmt.Sprintf("%d:%d", height, version)) + } + return strings.Join(scheduleParts, ",") +} From e0ed8c25db472bce5b136536868a1ad6da49c6f7 Mon Sep 17 00:00:00 2001 From: Callum Waters Date: Thu, 26 Sep 2024 12:03:31 +0200 Subject: [PATCH 02/31] add support to specify the share version of txsim --- test/cmd/txsim/cli.go | 9 ++++++++- test/e2e/main.go | 1 + test/e2e/major_upgrade_v3.go | 20 +++++++++++--------- test/e2e/testnet/txsimNode.go | 25 ++++++++++++++----------- 4 files changed, 34 insertions(+), 21 deletions(-) diff --git a/test/cmd/txsim/cli.go b/test/cmd/txsim/cli.go index bf334437c4..d4132a4829 100644 --- a/test/cmd/txsim/cli.go +++ b/test/cmd/txsim/cli.go @@ -41,6 +41,7 @@ var ( stake, stakeValue, blob int useFeegrant, suppressLogs bool upgradeSchedule string + blobShareVersion int ) func main() { @@ -128,7 +129,12 @@ well funded account that can act as the master account. The command runs until a return fmt.Errorf("invalid blob amounts: %w", err) } - sequences = append(sequences, txsim.NewBlobSequence(sizes, blobsPerPFB).Clone(blob)...) + sequence := txsim.NewBlobSequence(sizes, blobsPerPFB) + if blobShareVersion >= 0 { + sequence.WithShareVersion(uint8(blobShareVersion)) + } + + sequences = append(sequences, sequence.Clone(blob)...) } upgradeScheduleMap, err := parseUpgradeSchedule(upgradeSchedule) @@ -210,6 +216,7 @@ func flags() *flag.FlagSet { flags.StringVar(&blobAmounts, "blob-amounts", "1", "range of blobs per PFB specified as a single value or a min-max range (e.g., 10 or 5-10). A single value indicates the exact number of blobs to be created.") flags.BoolVar(&useFeegrant, "feegrant", false, "use the feegrant module to pay for fees") flags.BoolVar(&suppressLogs, "suppressLogs", false, "disable logging") + flags.IntVar(&blobShareVersion, "blob-share-version", -1, "optionally specify a share version to use for the blob sequences") return flags } diff --git a/test/e2e/main.go b/test/e2e/main.go index 0928779dbb..f58cd67526 100644 --- a/test/e2e/main.go +++ b/test/e2e/main.go @@ -23,6 +23,7 @@ func main() { tests := []Test{ {"MinorVersionCompatibility", MinorVersionCompatibility}, {"MajorUpgradeToV2", MajorUpgradeToV2}, + {"MajorUpgradeToV3", MajorUpgradeToV3}, {"E2ESimple", E2ESimple}, } diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go index efad77e808..304c6f3865 100644 --- a/test/e2e/major_upgrade_v3.go +++ b/test/e2e/major_upgrade_v3.go @@ -25,8 +25,7 @@ func MajorUpgradeToV3(logger *log.Logger) error { defer testNet.Cleanup(ctx) - latestVersion, err := testnet.GetLatestVersion() - testnet.NoError("failed to get latest version", err) + latestVersion := "8392821" //, err := testnet.GetLatestVersion() logger.Println("Running major upgrade to v3 test", "version", latestVersion) @@ -42,7 +41,7 @@ func MajorUpgradeToV3(logger *log.Logger) error { logger.Println("Creating genesis nodes") for i := 0; i < numNodes; i++ { - err := testNet.CreateGenesisNode(ctx, latestVersion, 10000000, upgradeHeight, testnet.DefaultResources, true) + err := testNet.CreateGenesisNode(ctx, latestVersion, 10000000, 0, testnet.DefaultResources, true) testnet.NoError("failed to create genesis node", err) } @@ -52,7 +51,7 @@ func MajorUpgradeToV3(logger *log.Logger) error { upgradeSchedule := map[int64]uint64{ upgradeHeight: v3.Version, } - err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule) + err = testNet.CreateTxClient(ctx, "txsim", latestVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnet") @@ -60,15 +59,19 @@ func MajorUpgradeToV3(logger *log.Logger) error { logger.Println("Starting testnet") testnet.NoError("Failed to start testnet", testNet.Start(ctx)) + timer := time.NewTimer(time.Minute) + defer timer.Stop() + ticker := time.NewTicker(3 * time.Second) + defer ticker.Stop() + + logger.Println("waiting for upgrade") for _, node := range testNet.Nodes() { client, err := node.Client() testnet.NoError("failed to get client", err) - timer := time.NewTimer(time.Minute) - ticker := time.NewTicker(3 * time.Second) upgradeComplete := false + lastHeight := int64(0) for !upgradeComplete { - lastHeight := int64(0) select { case <-timer.C: return fmt.Errorf("failed to upgrade to v3, last height: %d", lastHeight) @@ -78,11 +81,10 @@ func MajorUpgradeToV3(logger *log.Logger) error { if resp.Header.Version.App == v3.Version { upgradeComplete = true } + fmt.Println("height", resp.Header.Height) lastHeight = resp.Header.Height } } - timer.Stop() - ticker.Stop() } return nil diff --git a/test/e2e/testnet/txsimNode.go b/test/e2e/testnet/txsimNode.go index a8796244e5..5f603bc4f0 100644 --- a/test/e2e/testnet/txsimNode.go +++ b/test/e2e/testnet/txsimNode.go @@ -43,10 +43,6 @@ func CreateTxClient( return nil, err } image := txsimDockerImageName(version) - log.Info(). - Str("name", name). - Str("image", image). - Msg("setting image for tx client") err = txIns.Build().SetImage(ctx, image) if err != nil { log.Err(err). @@ -68,19 +64,26 @@ func CreateTxClient( return nil, err } args := []string{ - fmt.Sprintf("-grpc-endpoint %s", endpoint), - fmt.Sprintf("-poll-time %ds", pollTime), - fmt.Sprintf("-seed %d ", seed), - fmt.Sprintf("-blob %d ", sequences), - fmt.Sprintf("-blob-amounts %d ", blobsPerSeq), - fmt.Sprintf("-blob-sizes %s ", blobRange), - fmt.Sprintf("-upgrade-schedule %s ", stringifyUpgradeSchedule(upgradeSchedule)), + fmt.Sprintf("--key-path %s", volumePath), + fmt.Sprintf("--grpc-endpoint %s", endpoint), + fmt.Sprintf("--poll-time %ds", pollTime), + fmt.Sprintf("--seed %d", seed), + fmt.Sprintf("--blob %d", sequences), + fmt.Sprintf("--blob-amounts %d", blobsPerSeq), + fmt.Sprintf("--blob-sizes %s", blobRange), + fmt.Sprintf("--upgrade-schedule %s", stringifyUpgradeSchedule(upgradeSchedule)), } if err := txIns.Build().SetArgs(args...); err != nil { return nil, err } + log.Info(). + Str("name", name). + Str("image", image). + Str("args", strings.Join(args, " ")). + Msg("created tx client") + return &TxSim{ Name: name, Instance: txIns, From 2e88e7d8e774d481bb46e35c080193b792748f66 Mon Sep 17 00:00:00 2001 From: Callum Waters Date: Thu, 26 Sep 2024 15:56:19 +0200 Subject: [PATCH 03/31] use int64 instead --- pkg/appconsts/global_consts.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/appconsts/global_consts.go b/pkg/appconsts/global_consts.go index 2bd69e38dc..346e15547c 100644 --- a/pkg/appconsts/global_consts.go +++ b/pkg/appconsts/global_consts.go @@ -30,7 +30,7 @@ const ( // DefaultUpgradeHeightDelay is the number of blocks after a quorum has been // reached that the chain should upgrade to the new version. Assuming a block // interval of 12 seconds, this is 7 days. - DefaultUpgradeHeightDelay = 1 //int64(7 * 24 * 60 * 60 / 12) // 7 days * 24 hours * 60 minutes * 60 seconds / 12 seconds per block = 50,400 blocks. + DefaultUpgradeHeightDelay = int64(1) //int64(7 * 24 * 60 * 60 / 12) // 7 days * 24 hours * 60 minutes * 60 seconds / 12 seconds per block = 50,400 blocks. ) var ( From 3be733fd0a95ebd6a39dd6cdda7fef1691d03d2d Mon Sep 17 00:00:00 2001 From: Callum Waters Date: Thu, 26 Sep 2024 16:32:30 +0200 Subject: [PATCH 04/31] update txsim --- test/cmd/txsim/cli.go | 4 ++-- test/e2e/major_upgrade_v3.go | 4 ++-- test/e2e/testnet/txsimNode.go | 7 ++++--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/test/cmd/txsim/cli.go b/test/cmd/txsim/cli.go index d4132a4829..55cac6d4fd 100644 --- a/test/cmd/txsim/cli.go +++ b/test/cmd/txsim/cli.go @@ -103,8 +103,8 @@ well funded account that can act as the master account. The command runs until a masterAccName = os.Getenv(TxsimMasterAccName) } - if stake == 0 && send == 0 && blob == 0 { - return errors.New("no sequences specified. Use --stake, --send or --blob") + if stake == 0 && send == 0 && blob == 0 && upgradeSchedule == "" { + return errors.New("no sequences specified. Use --stake, --send, --upgrade-schedule or --blob") } // setup the sequences diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go index 304c6f3865..d7443a3040 100644 --- a/test/e2e/major_upgrade_v3.go +++ b/test/e2e/major_upgrade_v3.go @@ -15,7 +15,7 @@ import ( func MajorUpgradeToV3(logger *log.Logger) error { numNodes := 4 - upgradeHeight := int64(10) + upgradeHeight := int64(20) ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -25,7 +25,7 @@ func MajorUpgradeToV3(logger *log.Logger) error { defer testNet.Cleanup(ctx) - latestVersion := "8392821" //, err := testnet.GetLatestVersion() + latestVersion := "ef37dcd" //, err := testnet.GetLatestVersion() logger.Println("Running major upgrade to v3 test", "version", latestVersion) diff --git a/test/e2e/testnet/txsimNode.go b/test/e2e/testnet/txsimNode.go index 5f603bc4f0..0b7799df64 100644 --- a/test/e2e/testnet/txsimNode.go +++ b/test/e2e/testnet/txsimNode.go @@ -68,10 +68,11 @@ func CreateTxClient( fmt.Sprintf("--grpc-endpoint %s", endpoint), fmt.Sprintf("--poll-time %ds", pollTime), fmt.Sprintf("--seed %d", seed), - fmt.Sprintf("--blob %d", sequences), - fmt.Sprintf("--blob-amounts %d", blobsPerSeq), - fmt.Sprintf("--blob-sizes %s", blobRange), + // fmt.Sprintf("--blob %d", sequences), + // fmt.Sprintf("--blob-amounts %d", blobsPerSeq), + // fmt.Sprintf("--blob-sizes %s", blobRange), fmt.Sprintf("--upgrade-schedule %s", stringifyUpgradeSchedule(upgradeSchedule)), + // fmt.Sprintf("--blob-share-version %d", share.ShareVersionZero), } if err := txIns.Build().SetArgs(args...); err != nil { From f3b91cb87f574b1322f5b843e657faa9194f731e Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Thu, 3 Oct 2024 16:04:38 -0400 Subject: [PATCH 05/31] comments for HACKHACKs --- pkg/appconsts/global_consts.go | 5 ++++- test/e2e/major_upgrade_v3.go | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pkg/appconsts/global_consts.go b/pkg/appconsts/global_consts.go index 346e15547c..46b715b7eb 100644 --- a/pkg/appconsts/global_consts.go +++ b/pkg/appconsts/global_consts.go @@ -30,7 +30,10 @@ const ( // DefaultUpgradeHeightDelay is the number of blocks after a quorum has been // reached that the chain should upgrade to the new version. Assuming a block // interval of 12 seconds, this is 7 days. - DefaultUpgradeHeightDelay = int64(1) //int64(7 * 24 * 60 * 60 / 12) // 7 days * 24 hours * 60 minutes * 60 seconds / 12 seconds per block = 50,400 blocks. + // DefaultUpgradeHeightDelay = int64(7 * 24 * 60 * 60 / 12) // 7 days * 24 hours * 60 minutes * 60 seconds / 12 seconds per block = 50,400 blocks. + + // HACKHACK: Override the default for the e2e test. Do not merge this as-is. + DefaultUpgradeHeightDelay = int64(1) ) var ( diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go index d7443a3040..c4b769da5f 100644 --- a/test/e2e/major_upgrade_v3.go +++ b/test/e2e/major_upgrade_v3.go @@ -25,7 +25,9 @@ func MajorUpgradeToV3(logger *log.Logger) error { defer testNet.Cleanup(ctx) - latestVersion := "ef37dcd" //, err := testnet.GetLatestVersion() + // HACKHACK: use a version of celestia-app built from a commit on this PR. + // Do not merge as-is. + latestVersion := "ef37dcd" logger.Println("Running major upgrade to v3 test", "version", latestVersion) From b3d47e268e3b4362045771c7b64969b55f002edb Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Thu, 3 Oct 2024 16:28:14 -0400 Subject: [PATCH 06/31] instruct txSim to not send blobs --- test/e2e/major_upgrade_v3.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go index c4b769da5f..d259ccfa2e 100644 --- a/test/e2e/major_upgrade_v3.go +++ b/test/e2e/major_upgrade_v3.go @@ -53,7 +53,7 @@ func MajorUpgradeToV3(logger *log.Logger) error { upgradeSchedule := map[int64]uint64{ upgradeHeight: v3.Version, } - err = testNet.CreateTxClient(ctx, "txsim", latestVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule) + err = testNet.CreateTxClient(ctx, "txsim", latestVersion, 1, "0", 0, testnet.DefaultResources, endpoints[0], upgradeSchedule) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnet") From 30eb9f5bc299f1155367baf7f43899d82228fb12 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Thu, 3 Oct 2024 16:28:30 -0400 Subject: [PATCH 07/31] improve comments + names --- test/e2e/testnet/testnet.go | 28 +++++++++++++--------------- test/e2e/testnet/txsimNode.go | 18 ++++++++++-------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index f29e342a20..3a7ee44d00 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -136,28 +136,26 @@ func (t *Testnet) CreateTxClients(ctx context.Context, return nil } -// CreateTxClient creates a txsim node and sets it up -// name: name of the txsim knuu instance -// version: version of the txsim docker image to be pulled from the registry -// specified by txsimDockerSrcURL -// seed: seed for the txsim -// sequences: number of sequences to be run by the txsim -// blobRange: range of blob sizes to be used by the txsim in bytes -// pollTime: time in seconds between each sequence -// resources: resources to be allocated to the txsim -// grpcEndpoint: grpc endpoint of the node to which the txsim will connect and send transactions +// CreateTxClient creates a txsim node and sets it up. func (t *Testnet) CreateTxClient( ctx context.Context, - name, version string, + // name of the txsim knuu instance + name string, + // version of the txsim docker image to be pulled from the registry + version string, + // sequences: number of sequences to be run by the txsim sequences int, + // blobRange: range of blob sizes to be used by the txsim in bytes blobRange string, blobPerSequence int, + // resources: resources to be allocated to the txsim resources Resources, + // grpcEndpoint: grpc endpoint of the node to which the txsim will connect and send transactions grpcEndpoint string, upgradeSchedule map[int64]uint64, ) error { - // create an account, and store it in a temp directory and add the account as genesis account to - // the testnet + // Create an account, and store it in a temp directory and add the account as genesis account to + // the testnet. txsimKeyringDir := filepath.Join(os.TempDir(), name) log.Info(). Str("name", name). @@ -168,7 +166,7 @@ func (t *Testnet) CreateTxClient( return err } - // Create a txsim node using the key stored in the txsimKeyringDir + // Create a txsim node using the key stored in the txsimKeyringDir. txsim, err := CreateTxClient(ctx, name, version, grpcEndpoint, t.seed, sequences, blobRange, blobPerSequence, 1, resources, txsimRootDir, t.knuu, upgradeSchedule) if err != nil { @@ -185,7 +183,7 @@ func (t *Testnet) CreateTxClient( return err } - // copy over the keyring directory to the txsim instance + // Copy over the keyring directory to the txsim instance. err = txsim.Instance.Storage().AddFolder(txsimKeyringDir, txsimRootDir, "10001:10001") if err != nil { log.Err(err). diff --git a/test/e2e/testnet/txsimNode.go b/test/e2e/testnet/txsimNode.go index 0b7799df64..cbef532017 100644 --- a/test/e2e/testnet/txsimNode.go +++ b/test/e2e/testnet/txsimNode.go @@ -24,9 +24,11 @@ type TxSim struct { Instance *instance.Instance } +// CreateTxClient returns a new TxSim instance. func CreateTxClient( ctx context.Context, - name, version string, + name string, + version string, endpoint string, seed int64, sequences int, @@ -38,12 +40,12 @@ func CreateTxClient( knuu *knuu.Knuu, upgradeSchedule map[int64]uint64, ) (*TxSim, error) { - txIns, err := knuu.NewInstance(name) + instance, err := knuu.NewInstance(name) if err != nil { return nil, err } image := txsimDockerImageName(version) - err = txIns.Build().SetImage(ctx, image) + err = instance.Build().SetImage(ctx, image) if err != nil { log.Err(err). Str("name", name). @@ -51,15 +53,15 @@ func CreateTxClient( Msg("failed to set image for tx client") return nil, err } - err = txIns.Resources().SetMemory(resources.MemoryRequest, resources.MemoryLimit) + err = instance.Resources().SetMemory(resources.MemoryRequest, resources.MemoryLimit) if err != nil { return nil, err } - err = txIns.Resources().SetCPU(resources.CPU) + err = instance.Resources().SetCPU(resources.CPU) if err != nil { return nil, err } - err = txIns.Storage().AddVolumeWithOwner(volumePath, resources.Volume, 10001) + err = instance.Storage().AddVolumeWithOwner(volumePath, resources.Volume, 10001) if err != nil { return nil, err } @@ -75,7 +77,7 @@ func CreateTxClient( // fmt.Sprintf("--blob-share-version %d", share.ShareVersionZero), } - if err := txIns.Build().SetArgs(args...); err != nil { + if err := instance.Build().SetArgs(args...); err != nil { return nil, err } @@ -87,7 +89,7 @@ func CreateTxClient( return &TxSim{ Name: name, - Instance: txIns, + Instance: instance, }, nil } From 0433ddc8b0e54d8561086522567c388768124981 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Thu, 3 Oct 2024 16:29:43 -0400 Subject: [PATCH 08/31] Revert "instruct txSim to not send blobs" This reverts commit b3d47e268e3b4362045771c7b64969b55f002edb. --- test/e2e/major_upgrade_v3.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go index d259ccfa2e..c4b769da5f 100644 --- a/test/e2e/major_upgrade_v3.go +++ b/test/e2e/major_upgrade_v3.go @@ -53,7 +53,7 @@ func MajorUpgradeToV3(logger *log.Logger) error { upgradeSchedule := map[int64]uint64{ upgradeHeight: v3.Version, } - err = testNet.CreateTxClient(ctx, "txsim", latestVersion, 1, "0", 0, testnet.DefaultResources, endpoints[0], upgradeSchedule) + err = testNet.CreateTxClient(ctx, "txsim", latestVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnet") From e518b953307e6c4c7c328938939840ab01b84edf Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Thu, 3 Oct 2024 16:57:45 -0400 Subject: [PATCH 09/31] use last commit for txsim binary --- test/e2e/major_upgrade_v3.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go index c4b769da5f..5d14a9949d 100644 --- a/test/e2e/major_upgrade_v3.go +++ b/test/e2e/major_upgrade_v3.go @@ -27,7 +27,7 @@ func MajorUpgradeToV3(logger *log.Logger) error { // HACKHACK: use a version of celestia-app built from a commit on this PR. // Do not merge as-is. - latestVersion := "ef37dcd" + latestVersion := "0433ddc" logger.Println("Running major upgrade to v3 test", "version", latestVersion) From 9e9a659e171d2e27e42a0e8041fcb8a7900a7752 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Thu, 3 Oct 2024 16:57:57 -0400 Subject: [PATCH 10/31] debug --- test/cmd/txsim/cli.go | 1 + test/e2e/testnet/txsimNode.go | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/test/cmd/txsim/cli.go b/test/cmd/txsim/cli.go index 55cac6d4fd..d6902d751d 100644 --- a/test/cmd/txsim/cli.go +++ b/test/cmd/txsim/cli.go @@ -138,6 +138,7 @@ well funded account that can act as the master account. The command runs until a } upgradeScheduleMap, err := parseUpgradeSchedule(upgradeSchedule) + fmt.Printf("upgradeScheduleMap: %v\n", upgradeScheduleMap) if err != nil { return fmt.Errorf("invalid upgrade schedule: %w", err) } diff --git a/test/e2e/testnet/txsimNode.go b/test/e2e/testnet/txsimNode.go index cbef532017..2a616cbf32 100644 --- a/test/e2e/testnet/txsimNode.go +++ b/test/e2e/testnet/txsimNode.go @@ -31,7 +31,7 @@ func CreateTxClient( version string, endpoint string, seed int64, - sequences int, + blobSequences int, blobRange string, blobsPerSeq int, pollTime int, @@ -45,6 +45,7 @@ func CreateTxClient( return nil, err } image := txsimDockerImageName(version) + fmt.Printf("txsimDocker image: %s\n", image) err = instance.Build().SetImage(ctx, image) if err != nil { log.Err(err). @@ -70,9 +71,9 @@ func CreateTxClient( fmt.Sprintf("--grpc-endpoint %s", endpoint), fmt.Sprintf("--poll-time %ds", pollTime), fmt.Sprintf("--seed %d", seed), - // fmt.Sprintf("--blob %d", sequences), - // fmt.Sprintf("--blob-amounts %d", blobsPerSeq), - // fmt.Sprintf("--blob-sizes %s", blobRange), + fmt.Sprintf("--blob %d", blobSequences), + fmt.Sprintf("--blob-amounts %d", blobsPerSeq), + fmt.Sprintf("--blob-sizes %s", blobRange), fmt.Sprintf("--upgrade-schedule %s", stringifyUpgradeSchedule(upgradeSchedule)), // fmt.Sprintf("--blob-share-version %d", share.ShareVersionZero), } From 465c1a195de8772ce4da8e340c9e452622039002 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Fri, 4 Oct 2024 12:59:42 -0400 Subject: [PATCH 11/31] debug: use pr version for Docker images --- test/e2e/major_upgrade_v3.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go index 5d14a9949d..0ca444cb51 100644 --- a/test/e2e/major_upgrade_v3.go +++ b/test/e2e/major_upgrade_v3.go @@ -27,9 +27,9 @@ func MajorUpgradeToV3(logger *log.Logger) error { // HACKHACK: use a version of celestia-app built from a commit on this PR. // Do not merge as-is. - latestVersion := "0433ddc" + version := "pr-3910" - logger.Println("Running major upgrade to v3 test", "version", latestVersion) + logger.Println("Running major upgrade to v3 test", "version", version) cp := app.DefaultConsensusParams() cp.Version.AppVersion = v2.Version @@ -39,11 +39,11 @@ func MajorUpgradeToV3(logger *log.Logger) error { testnet.NoError("failed to create preloader", err) defer func() { _ = preloader.EmptyImages(ctx) }() - testnet.NoError("failed to add image", preloader.AddImage(ctx, testnet.DockerImageName(latestVersion))) + testnet.NoError("failed to add image", preloader.AddImage(ctx, testnet.DockerImageName(version))) logger.Println("Creating genesis nodes") for i := 0; i < numNodes; i++ { - err := testNet.CreateGenesisNode(ctx, latestVersion, 10000000, 0, testnet.DefaultResources, true) + err := testNet.CreateGenesisNode(ctx, version, 10000000, 0, testnet.DefaultResources, true) testnet.NoError("failed to create genesis node", err) } @@ -53,7 +53,7 @@ func MajorUpgradeToV3(logger *log.Logger) error { upgradeSchedule := map[int64]uint64{ upgradeHeight: v3.Version, } - err = testNet.CreateTxClient(ctx, "txsim", latestVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule) + err = testNet.CreateTxClient(ctx, "txsim", version, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnet") From 15ce3dccbe93cc3ffd77e6690f6789480b28bb97 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Fri, 4 Oct 2024 13:03:00 -0400 Subject: [PATCH 12/31] fix: specify share version zero --- test/e2e/testnet/testnet.go | 4 ++-- test/e2e/testnet/txsimNode.go | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index 3a7ee44d00..42389314d3 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -144,7 +144,7 @@ func (t *Testnet) CreateTxClient( // version of the txsim docker image to be pulled from the registry version string, // sequences: number of sequences to be run by the txsim - sequences int, + blobSequences int, // blobRange: range of blob sizes to be used by the txsim in bytes blobRange string, blobPerSequence int, @@ -168,7 +168,7 @@ func (t *Testnet) CreateTxClient( // Create a txsim node using the key stored in the txsimKeyringDir. txsim, err := CreateTxClient(ctx, name, version, grpcEndpoint, t.seed, - sequences, blobRange, blobPerSequence, 1, resources, txsimRootDir, t.knuu, upgradeSchedule) + blobSequences, blobRange, blobPerSequence, 1, resources, txsimRootDir, t.knuu, upgradeSchedule) if err != nil { log.Err(err). Str("name", name). diff --git a/test/e2e/testnet/txsimNode.go b/test/e2e/testnet/txsimNode.go index 2a616cbf32..df9e15b6ce 100644 --- a/test/e2e/testnet/txsimNode.go +++ b/test/e2e/testnet/txsimNode.go @@ -6,6 +6,7 @@ import ( "fmt" "strings" + "github.com/celestiaorg/go-square/v2/share" "github.com/celestiaorg/knuu/pkg/instance" "github.com/celestiaorg/knuu/pkg/knuu" "github.com/rs/zerolog/log" @@ -75,7 +76,7 @@ func CreateTxClient( fmt.Sprintf("--blob-amounts %d", blobsPerSeq), fmt.Sprintf("--blob-sizes %s", blobRange), fmt.Sprintf("--upgrade-schedule %s", stringifyUpgradeSchedule(upgradeSchedule)), - // fmt.Sprintf("--blob-share-version %d", share.ShareVersionZero), + fmt.Sprintf("--blob-share-version %d", share.ShareVersionZero), } if err := instance.Build().SetArgs(args...); err != nil { From f2396b533dff313eafd46cc2ca13b3cd218e95a5 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Fri, 4 Oct 2024 13:15:58 -0400 Subject: [PATCH 13/31] refactor: extract key_generator --- test/e2e/testnet/key_generator.go | 37 +++++++++++++++++++++++++++++++ test/e2e/testnet/util.go | 32 -------------------------- 2 files changed, 37 insertions(+), 32 deletions(-) create mode 100644 test/e2e/testnet/key_generator.go diff --git a/test/e2e/testnet/key_generator.go b/test/e2e/testnet/key_generator.go new file mode 100644 index 0000000000..cfaa39e866 --- /dev/null +++ b/test/e2e/testnet/key_generator.go @@ -0,0 +1,37 @@ +package testnet + +import ( + "io" + "math/rand" + + "github.com/tendermint/tendermint/crypto" + "github.com/tendermint/tendermint/crypto/ed25519" + "github.com/tendermint/tendermint/crypto/secp256k1" +) + +type keyGenerator struct { + random *rand.Rand +} + +func newKeyGenerator(seed int64) *keyGenerator { + return &keyGenerator{ + random: rand.New(rand.NewSource(seed)), //nolint:gosec + } +} + +func (g *keyGenerator) Generate(keyType string) crypto.PrivKey { + seed := make([]byte, ed25519.SeedSize) + + _, err := io.ReadFull(g.random, seed) + if err != nil { + panic(err) // this shouldn't happen + } + switch keyType { + case "secp256k1": + return secp256k1.GenPrivKeySecp256k1(seed) + case "", "ed25519": + return ed25519.GenPrivKeyFromSecret(seed) + default: + panic("KeyType not supported") // should not make it this far + } +} diff --git a/test/e2e/testnet/util.go b/test/e2e/testnet/util.go index 0d89494858..edf89aceda 100644 --- a/test/e2e/testnet/util.go +++ b/test/e2e/testnet/util.go @@ -1,43 +1,11 @@ package testnet import ( - "io" - "math/rand" "os" "github.com/rs/zerolog/log" - "github.com/tendermint/tendermint/crypto" - "github.com/tendermint/tendermint/crypto/ed25519" - "github.com/tendermint/tendermint/crypto/secp256k1" ) -type keyGenerator struct { - random *rand.Rand -} - -func newKeyGenerator(seed int64) *keyGenerator { - return &keyGenerator{ - random: rand.New(rand.NewSource(seed)), //nolint:gosec - } -} - -func (g *keyGenerator) Generate(keyType string) crypto.PrivKey { - seed := make([]byte, ed25519.SeedSize) - - _, err := io.ReadFull(g.random, seed) - if err != nil { - panic(err) // this shouldn't happen - } - switch keyType { - case "secp256k1": - return secp256k1.GenPrivKeySecp256k1(seed) - case "", "ed25519": - return ed25519.GenPrivKeyFromSecret(seed) - default: - panic("KeyType not supported") // should not make it this far - } -} - type GrafanaInfo struct { Endpoint string Username string From e88b6d785f23af08026e89ac2b6a3739871462e3 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Fri, 4 Oct 2024 13:22:35 -0400 Subject: [PATCH 14/31] debug: log keys available to txSim --- test/cmd/txsim/cli.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/cmd/txsim/cli.go b/test/cmd/txsim/cli.go index d6902d751d..393a11f4bb 100644 --- a/test/cmd/txsim/cli.go +++ b/test/cmd/txsim/cli.go @@ -90,6 +90,18 @@ well funded account that can act as the master account. The command runs until a if err != nil { return err } + fmt.Printf("keys: %v\n") + records, err := keys.List() + if err != nil { + return err + } + for _, record := range records { + address, err := record.GetAddress() + if err != nil { + return err + } + fmt.Printf("reccord name: %v address %v\n", record.Name, address) + } // get the rpc and grpc endpoints if grpcEndpoint == "" { From 937d57fc3fec1c42da7d94e8c20408ab84ebb537 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Fri, 4 Oct 2024 13:48:16 -0400 Subject: [PATCH 15/31] attempt to use validator volume for tx sim nodes --- test/cmd/txsim/cli.go | 4 ++-- test/e2e/testnet/node.go | 10 ++++++---- test/e2e/testnet/testnet.go | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/test/cmd/txsim/cli.go b/test/cmd/txsim/cli.go index 393a11f4bb..9c6ec05d59 100644 --- a/test/cmd/txsim/cli.go +++ b/test/cmd/txsim/cli.go @@ -90,7 +90,7 @@ well funded account that can act as the master account. The command runs until a if err != nil { return err } - fmt.Printf("keys: %v\n") + fmt.Printf("keys: %v\n", keys) records, err := keys.List() if err != nil { return err @@ -100,7 +100,7 @@ well funded account that can act as the master account. The command runs until a if err != nil { return err } - fmt.Printf("reccord name: %v address %v\n", record.Name, address) + fmt.Printf("reccord name: %v address %v\n", record.Name, address.String()) } // get the rpc and grpc endpoints diff --git a/test/e2e/testnet/node.go b/test/e2e/testnet/node.go index 71a82d3a75..488ac7d55b 100644 --- a/test/e2e/testnet/node.go +++ b/test/e2e/testnet/node.go @@ -36,7 +36,6 @@ const ( secp256k1Type = "secp256k1" ed25519Type = "ed25519" remoteRootDir = "/home/celestia/.celestia-app" - txsimRootDir = "/home/celestia" ) type Node struct { @@ -99,10 +98,13 @@ type Resources struct { func NewNode( ctx context.Context, - name, version string, - startHeight, selfDelegation int64, + name string, + version string, + startHeight int64, + selfDelegation int64, peers []string, - signerKey, networkKey crypto.PrivKey, + signerKey crypto.PrivKey, + networkKey crypto.PrivKey, upgradeHeight int64, resources Resources, grafana *GrafanaInfo, diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index 42389314d3..08d9101767 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -168,7 +168,7 @@ func (t *Testnet) CreateTxClient( // Create a txsim node using the key stored in the txsimKeyringDir. txsim, err := CreateTxClient(ctx, name, version, grpcEndpoint, t.seed, - blobSequences, blobRange, blobPerSequence, 1, resources, txsimRootDir, t.knuu, upgradeSchedule) + blobSequences, blobRange, blobPerSequence, 1, resources, remoteRootDir, t.knuu, upgradeSchedule) if err != nil { log.Err(err). Str("name", name). @@ -184,7 +184,7 @@ func (t *Testnet) CreateTxClient( } // Copy over the keyring directory to the txsim instance. - err = txsim.Instance.Storage().AddFolder(txsimKeyringDir, txsimRootDir, "10001:10001") + err = txsim.Instance.Storage().AddFolder(txsimKeyringDir, remoteRootDir, "10001:10001") if err != nil { log.Err(err). Str("directory", txsimKeyringDir). From 0d9aceb060165741a0df2ecca0d080b58a77bd8b Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Fri, 4 Oct 2024 14:13:21 -0400 Subject: [PATCH 16/31] refactor: renames for clarity --- test/e2e/major_upgrade_v3.go | 16 ++++++++-------- test/e2e/testnet/node.go | 6 +++--- test/e2e/testnet/testnet.go | 24 ++++++++---------------- 3 files changed, 19 insertions(+), 27 deletions(-) diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go index 0ca444cb51..23baa2dd69 100644 --- a/test/e2e/major_upgrade_v3.go +++ b/test/e2e/major_upgrade_v3.go @@ -1,4 +1,3 @@ -//nolint:staticcheck package main import ( @@ -15,12 +14,12 @@ import ( func MajorUpgradeToV3(logger *log.Logger) error { numNodes := 4 - upgradeHeight := int64(20) + upgradeHeightV3 := int64(20) ctx, cancel := context.WithCancel(context.Background()) defer cancel() logger.Println("Creating testnet") - testNet, err := testnet.New(ctx, "runMajorUpgradeToV3", seed, nil, "test") + testNet, err := testnet.New(ctx, "MajorUpgradeToV3", seed, nil, "test") testnet.NoError("failed to create testnet", err) defer testNet.Cleanup(ctx) @@ -31,15 +30,16 @@ func MajorUpgradeToV3(logger *log.Logger) error { logger.Println("Running major upgrade to v3 test", "version", version) - cp := app.DefaultConsensusParams() - cp.Version.AppVersion = v2.Version - testNet.SetConsensusParams(cp) + consensusParams := app.DefaultConsensusParams() + consensusParams.Version.AppVersion = v2.Version // Start the test on v2 + testNet.SetConsensusParams(consensusParams) preloader, err := testNet.NewPreloader() testnet.NoError("failed to create preloader", err) + err = preloader.AddImage(ctx, testnet.DockerImageName(version)) + testnet.NoError("failed to add image", err) defer func() { _ = preloader.EmptyImages(ctx) }() - testnet.NoError("failed to add image", preloader.AddImage(ctx, testnet.DockerImageName(version))) logger.Println("Creating genesis nodes") for i := 0; i < numNodes; i++ { @@ -51,7 +51,7 @@ func MajorUpgradeToV3(logger *log.Logger) error { endpoints, err := testNet.RemoteGRPCEndpoints(ctx) testnet.NoError("failed to get remote gRPC endpoints", err) upgradeSchedule := map[int64]uint64{ - upgradeHeight: v3.Version, + upgradeHeightV3: v3.Version, } err = testNet.CreateTxClient(ctx, "txsim", version, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule) testnet.NoError("failed to create tx client", err) diff --git a/test/e2e/testnet/node.go b/test/e2e/testnet/node.go index 488ac7d55b..e431ab4a88 100644 --- a/test/e2e/testnet/node.go +++ b/test/e2e/testnet/node.go @@ -105,7 +105,7 @@ func NewNode( peers []string, signerKey crypto.PrivKey, networkKey crypto.PrivKey, - upgradeHeight int64, + upgradeHeightV2 int64, resources Resources, grafana *GrafanaInfo, kn *knuu.Knuu, @@ -161,8 +161,8 @@ func NewNode( if disableBBR { args = append(args, "--force-no-bbr") } - if upgradeHeight != 0 { - args = append(args, fmt.Sprintf("--v2-upgrade-height=%d", upgradeHeight)) + if upgradeHeightV2 != 0 { + args = append(args, fmt.Sprintf("--v2-upgrade-height=%d", upgradeHeightV2)) } if err := knInstance.Build().SetArgs(args...); err != nil { diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index 08d9101767..7fb6eb19cd 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -30,10 +30,7 @@ type Testnet struct { knuu *knuu.Knuu } -func New(ctx context.Context, name string, seed int64, grafana *GrafanaInfo, chainID string, - genesisModifiers ...genesis.Modifier) ( - *Testnet, error, -) { +func New(ctx context.Context, name string, seed int64, grafana *GrafanaInfo, chainID string, genesisModifiers ...genesis.Modifier) (*Testnet, error) { identifier := fmt.Sprintf("%s_%s", name, time.Now().Format("20060102_150405")) kn, err := knuu.New(ctx, knuu.Options{ Scope: identifier, @@ -83,14 +80,10 @@ func (t *Testnet) SetConsensusMaxBlockSize(size int64) { t.genesis.ConsensusParams.Block.MaxBytes = size } -func (t *Testnet) CreateGenesisNode(ctx context.Context, version string, selfDelegation, upgradeHeight int64, resources Resources, disableBBR bool) error { +func (t *Testnet) CreateGenesisNode(ctx context.Context, version string, selfDelegation, upgradeHeightV2 int64, resources Resources, disableBBR bool) error { signerKey := t.keygen.Generate(ed25519Type) networkKey := t.keygen.Generate(ed25519Type) - node, err := NewNode(ctx, - fmt.Sprintf("val%d", len(t.nodes)), version, 0, - selfDelegation, nil, signerKey, networkKey, - upgradeHeight, resources, t.grafana, t.knuu, disableBBR, - ) + node, err := NewNode(ctx, fmt.Sprintf("val%d", len(t.nodes)), version, 0, selfDelegation, nil, signerKey, networkKey, upgradeHeightV2, resources, t.grafana, t.knuu, disableBBR) if err != nil { return err } @@ -101,9 +94,9 @@ func (t *Testnet) CreateGenesisNode(ctx context.Context, version string, selfDel return nil } -func (t *Testnet) CreateGenesisNodes(ctx context.Context, num int, version string, selfDelegation, upgradeHeight int64, resources Resources, disableBBR bool) error { +func (t *Testnet) CreateGenesisNodes(ctx context.Context, num int, version string, selfDelegation, upgradeHeightV2 int64, resources Resources, disableBBR bool) error { for i := 0; i < num; i++ { - if err := t.CreateGenesisNode(ctx, version, selfDelegation, upgradeHeight, resources, disableBBR); err != nil { + if err := t.CreateGenesisNode(ctx, version, selfDelegation, upgradeHeightV2, resources, disableBBR); err != nil { return err } } @@ -120,8 +113,7 @@ func (t *Testnet) CreateTxClients(ctx context.Context, ) error { for i, grpcEndpoint := range grpcEndpoints { name := fmt.Sprintf("txsim%d", i) - err := t.CreateTxClient(ctx, name, version, sequences, - blobRange, blobPerSequence, resources, grpcEndpoint, nil) + err := t.CreateTxClient(ctx, name, version, sequences, blobRange, blobPerSequence, resources, grpcEndpoint, nil) if err != nil { log.Err(err).Str("name", name). Str("grpc endpoint", grpcEndpoint). @@ -152,6 +144,7 @@ func (t *Testnet) CreateTxClient( resources Resources, // grpcEndpoint: grpc endpoint of the node to which the txsim will connect and send transactions grpcEndpoint string, + // upgradeSchedule is a map from height to version, specifying the version to upgrade to at the given height upgradeSchedule map[int64]uint64, ) error { // Create an account, and store it in a temp directory and add the account as genesis account to @@ -167,8 +160,7 @@ func (t *Testnet) CreateTxClient( } // Create a txsim node using the key stored in the txsimKeyringDir. - txsim, err := CreateTxClient(ctx, name, version, grpcEndpoint, t.seed, - blobSequences, blobRange, blobPerSequence, 1, resources, remoteRootDir, t.knuu, upgradeSchedule) + txsim, err := CreateTxClient(ctx, name, version, grpcEndpoint, t.seed, blobSequences, blobRange, blobPerSequence, 1, resources, remoteRootDir, t.knuu, upgradeSchedule) if err != nil { log.Err(err). Str("name", name). From acbf9cc0a1a89acc3e3f7ccb664dd7b901f4b26c Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Fri, 4 Oct 2024 15:06:42 -0400 Subject: [PATCH 17/31] attempt to plumb priv keys into tx sim --- test/e2e/major_upgrade_v2.go | 3 +- test/e2e/major_upgrade_v3.go | 12 +++++- test/e2e/minor_version_compatibility.go | 3 +- test/e2e/simple.go | 4 +- test/e2e/testnet/node.go | 6 +-- test/e2e/testnet/testnet.go | 55 ++++++++++++++++++++----- 6 files changed, 62 insertions(+), 21 deletions(-) diff --git a/test/e2e/major_upgrade_v2.go b/test/e2e/major_upgrade_v2.go index f1e2b1cb80..ed026ed440 100644 --- a/test/e2e/major_upgrade_v2.go +++ b/test/e2e/major_upgrade_v2.go @@ -12,6 +12,7 @@ import ( v1 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v1" v2 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v2" "github.com/celestiaorg/celestia-app/v3/test/e2e/testnet" + "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/rpc/client/http" ) @@ -52,7 +53,7 @@ func MajorUpgradeToV2(logger *log.Logger) error { logger.Println("Creating txsim") endpoints, err := testNet.RemoteGRPCEndpoints(ctx) testnet.NoError("failed to get remote gRPC endpoints", err) - err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil) + err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil, []crypto.PrivKey{}) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnet") diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go index 23baa2dd69..3c3e1414a6 100644 --- a/test/e2e/major_upgrade_v3.go +++ b/test/e2e/major_upgrade_v3.go @@ -10,6 +10,7 @@ import ( v2 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v2" v3 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v3" "github.com/celestiaorg/celestia-app/v3/test/e2e/testnet" + "github.com/tendermint/tendermint/crypto" ) func MajorUpgradeToV3(logger *log.Logger) error { @@ -53,7 +54,14 @@ func MajorUpgradeToV3(logger *log.Logger) error { upgradeSchedule := map[int64]uint64{ upgradeHeightV3: v3.Version, } - err = testNet.CreateTxClient(ctx, "txsim", version, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule) + + // TODO: get the keys from the validators and plumb them into txClients + validatorKeys := []crypto.PrivKey{} + for _, node := range testNet.Nodes() { + validatorKeys = append(validatorKeys, node.SignerKey) + } + + err = testNet.CreateTxClient(ctx, "txsim", version, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule, validatorKeys) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnet") @@ -61,7 +69,7 @@ func MajorUpgradeToV3(logger *log.Logger) error { logger.Println("Starting testnet") testnet.NoError("Failed to start testnet", testNet.Start(ctx)) - timer := time.NewTimer(time.Minute) + timer := time.NewTimer(10 * time.Minute) defer timer.Stop() ticker := time.NewTicker(3 * time.Second) defer ticker.Stop() diff --git a/test/e2e/minor_version_compatibility.go b/test/e2e/minor_version_compatibility.go index bf058bb886..766a18078f 100644 --- a/test/e2e/minor_version_compatibility.go +++ b/test/e2e/minor_version_compatibility.go @@ -15,6 +15,7 @@ import ( v1 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v1" v2 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v2" "github.com/celestiaorg/celestia-app/v3/test/e2e/testnet" + "github.com/tendermint/tendermint/crypto" ) func MinorVersionCompatibility(logger *log.Logger) error { @@ -63,7 +64,7 @@ func MinorVersionCompatibility(logger *log.Logger) error { logger.Println("Creating txsim") endpoints, err := testNet.RemoteGRPCEndpoints(ctx) testnet.NoError("failed to get remote gRPC endpoints", err) - err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil) + err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil, []crypto.PrivKey{}) testnet.NoError("failed to create tx client", err) // start the testnet diff --git a/test/e2e/simple.go b/test/e2e/simple.go index a2e6001120..6cd79c1528 100644 --- a/test/e2e/simple.go +++ b/test/e2e/simple.go @@ -9,6 +9,7 @@ import ( "github.com/celestiaorg/celestia-app/v3/pkg/appconsts" "github.com/celestiaorg/celestia-app/v3/test/e2e/testnet" "github.com/celestiaorg/celestia-app/v3/test/util/testnode" + "github.com/tendermint/tendermint/crypto" ) // This test runs a simple testnet with 4 validators. It submits both MsgPayForBlobs @@ -35,8 +36,7 @@ func E2ESimple(logger *log.Logger) error { logger.Println("Creating txsim") endpoints, err := testNet.RemoteGRPCEndpoints(ctx) testnet.NoError("failed to get remote gRPC endpoints", err) - err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 10, - "100-2000", 100, testnet.DefaultResources, endpoints[0], nil) + err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 10, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil, []crypto.PrivKey{}) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnets") diff --git a/test/e2e/testnet/node.go b/test/e2e/testnet/node.go index e431ab4a88..33c71cb190 100644 --- a/test/e2e/testnet/node.go +++ b/test/e2e/testnet/node.go @@ -58,8 +58,7 @@ type Node struct { // PullRoundStateTraces retrieves the round state traces from a node. // It will save them to the provided path. -func (n *Node) PullRoundStateTraces(path string) ([]trace.Event[schema.RoundState], error, -) { +func (n *Node) PullRoundStateTraces(path string) ([]trace.Event[schema.RoundState], error) { addr := n.AddressTracing() log.Info().Str("Address", addr).Msg("Pulling round state traces") @@ -72,8 +71,7 @@ func (n *Node) PullRoundStateTraces(path string) ([]trace.Event[schema.RoundStat // PullBlockSummaryTraces retrieves the block summary traces from a node. // It will save them to the provided path. -func (n *Node) PullBlockSummaryTraces(path string) ([]trace.Event[schema.BlockSummary], error, -) { +func (n *Node) PullBlockSummaryTraces(path string) ([]trace.Event[schema.BlockSummary], error) { addr := n.AddressTracing() log.Info().Str("Address", addr).Msg("Pulling block summary traces") diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index 7fb6eb19cd..e97cae7a4b 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -3,6 +3,7 @@ package testnet import ( "context" + "encoding/base64" "errors" "fmt" "os" @@ -17,6 +18,7 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/keyring" "github.com/rs/zerolog/log" + "github.com/tendermint/tendermint/crypto" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) @@ -110,10 +112,12 @@ func (t *Testnet) CreateTxClients(ctx context.Context, blobPerSequence int, resources Resources, grpcEndpoints []string, + upgradeSchedule map[int64]uint64, + validatorKeys []crypto.PrivKey, ) error { for i, grpcEndpoint := range grpcEndpoints { name := fmt.Sprintf("txsim%d", i) - err := t.CreateTxClient(ctx, name, version, sequences, blobRange, blobPerSequence, resources, grpcEndpoint, nil) + err := t.CreateTxClient(ctx, name, version, sequences, blobRange, blobPerSequence, resources, grpcEndpoint, upgradeSchedule, validatorKeys) if err != nil { log.Err(err).Str("name", name). Str("grpc endpoint", grpcEndpoint). @@ -146,6 +150,9 @@ func (t *Testnet) CreateTxClient( grpcEndpoint string, // upgradeSchedule is a map from height to version, specifying the version to upgrade to at the given height upgradeSchedule map[int64]uint64, + // validatorKeys is a list of validator keys to be used by the txsim. This + // is needed so that txSim can signal for versions on behalf of validators. + validatorKeys []crypto.PrivKey, ) error { // Create an account, and store it in a temp directory and add the account as genesis account to // the testnet. @@ -154,19 +161,46 @@ func (t *Testnet) CreateTxClient( Str("name", name). Str("directory", txsimKeyringDir). Msg("txsim keyring directory created") - _, err := t.CreateAccount(name, 1e16, txsimKeyringDir) + kr, err := t.CreateAccount(name, 1e16, txsimKeyringDir) if err != nil { return err } - // Create a txsim node using the key stored in the txsimKeyringDir. - txsim, err := CreateTxClient(ctx, name, version, grpcEndpoint, t.seed, blobSequences, blobRange, blobPerSequence, 1, resources, remoteRootDir, t.knuu, upgradeSchedule) - if err != nil { - log.Err(err). - Str("name", name). - Msg("error creating txsim") - return err + // Iterate over the Tendermint private keys and import them into the Cosmos SDK keyring + for i, validatorKey := range validatorKeys { + name := fmt.Sprintf("validator-%d", i) + + // Convert Tendermint private key to raw bytes and then to base64 (or keep it raw) + privKeyBytes := validatorKey.Bytes() + privKeyBase64 := base64.StdEncoding.EncodeToString(privKeyBytes) + + // Output the Base64 encoded key (or use privKeyBytes for raw format) + fmt.Printf("Private Key for %s: %s\n", name, privKeyBase64) + + // Convert Tendermint private key to Cosmos SDK's crypto.PrivKey type + // cosmosPrivKey := cryptotypes.PrivKey(validatorKey.(types.PrivKey)) + + // Import the private key into Cosmos SDK keyring + // kr.ImportPrivKey() + // // err := kr.ImportPrivKey(name, cosmosPrivKey, "password") + // // if err != nil { + // // return err + // // } + + // Get the public key to verify the key was imported + info, err := kr.Key(name) + if err != nil { + return err + } + address, err := info.GetAddress() + if err != nil { + return err + } + fmt.Printf("Imported Key Address: %s\n", address) } + + // Create a txsim node using the key stored in the txsimKeyringDir. + txsim, err := CreateTxClient(ctx, name, version, grpcEndpoint, t.seed, blobSequences, blobRange, blobPerSequence, 1, resources, txsimKeyringDir, t.knuu, upgradeSchedule) err = txsim.Instance.Build().Commit(ctx) if err != nil { log.Err(err). @@ -225,8 +259,7 @@ func (t *Testnet) CreateAccount(name string, tokens int64, txsimKeyringDir strin if txsimKeyringDir == "" { kr = keyring.NewInMemory(cdc) } else { // create a keyring with the specified directory - kr, err = keyring.New(app.Name, keyring.BackendTest, - txsimKeyringDir, nil, cdc) + kr, err = keyring.New(app.Name, keyring.BackendTest, txsimKeyringDir, nil, cdc) if err != nil { return nil, err } From 0a17009c0b46946fc866f223b3e77b7bb6db1445 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Fri, 4 Oct 2024 15:09:58 -0400 Subject: [PATCH 18/31] comment out broken code --- test/e2e/testnet/testnet.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index e97cae7a4b..82ab73b0ae 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -161,7 +161,7 @@ func (t *Testnet) CreateTxClient( Str("name", name). Str("directory", txsimKeyringDir). Msg("txsim keyring directory created") - kr, err := t.CreateAccount(name, 1e16, txsimKeyringDir) + _, err := t.CreateAccount(name, 1e16, txsimKeyringDir) if err != nil { return err } @@ -188,15 +188,15 @@ func (t *Testnet) CreateTxClient( // // } // Get the public key to verify the key was imported - info, err := kr.Key(name) - if err != nil { - return err - } - address, err := info.GetAddress() - if err != nil { - return err - } - fmt.Printf("Imported Key Address: %s\n", address) + // info, err := kr.Key(name) + // if err != nil { + // return err + // } + // address, err := info.GetAddress() + // if err != nil { + // return err + // } + // fmt.Printf("Imported Key Address: %s\n", address) } // Create a txsim node using the key stored in the txsimKeyringDir. From f5d6b44724521bd29fc9d7d30e40a74916ec1511 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Fri, 4 Oct 2024 15:59:47 -0400 Subject: [PATCH 19/31] add todo --- test/e2e/major_upgrade_v3.go | 7 +++---- test/e2e/testnet/testnet.go | 33 +-------------------------------- 2 files changed, 4 insertions(+), 36 deletions(-) diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go index 3c3e1414a6..dc68376c99 100644 --- a/test/e2e/major_upgrade_v3.go +++ b/test/e2e/major_upgrade_v3.go @@ -55,13 +55,12 @@ func MajorUpgradeToV3(logger *log.Logger) error { upgradeHeightV3: v3.Version, } - // TODO: get the keys from the validators and plumb them into txClients - validatorKeys := []crypto.PrivKey{} + nodeKeys := []crypto.PrivKey{} for _, node := range testNet.Nodes() { - validatorKeys = append(validatorKeys, node.SignerKey) + nodeKeys = append(nodeKeys, node.SignerKey) } - err = testNet.CreateTxClient(ctx, "txsim", version, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule, validatorKeys) + err = testNet.CreateTxClient(ctx, "txsim", version, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule, nodeKeys) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnet") diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index 82ab73b0ae..57779904ad 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -3,7 +3,6 @@ package testnet import ( "context" - "encoding/base64" "errors" "fmt" "os" @@ -167,37 +166,7 @@ func (t *Testnet) CreateTxClient( } // Iterate over the Tendermint private keys and import them into the Cosmos SDK keyring - for i, validatorKey := range validatorKeys { - name := fmt.Sprintf("validator-%d", i) - - // Convert Tendermint private key to raw bytes and then to base64 (or keep it raw) - privKeyBytes := validatorKey.Bytes() - privKeyBase64 := base64.StdEncoding.EncodeToString(privKeyBytes) - - // Output the Base64 encoded key (or use privKeyBytes for raw format) - fmt.Printf("Private Key for %s: %s\n", name, privKeyBase64) - - // Convert Tendermint private key to Cosmos SDK's crypto.PrivKey type - // cosmosPrivKey := cryptotypes.PrivKey(validatorKey.(types.PrivKey)) - - // Import the private key into Cosmos SDK keyring - // kr.ImportPrivKey() - // // err := kr.ImportPrivKey(name, cosmosPrivKey, "password") - // // if err != nil { - // // return err - // // } - - // Get the public key to verify the key was imported - // info, err := kr.Key(name) - // if err != nil { - // return err - // } - // address, err := info.GetAddress() - // if err != nil { - // return err - // } - // fmt.Printf("Imported Key Address: %s\n", address) - } + // TODO take the validatorKeys and add them to the keyring or txsimKeyringDir. // Create a txsim node using the key stored in the txsimKeyringDir. txsim, err := CreateTxClient(ctx, name, version, grpcEndpoint, t.seed, blobSequences, blobRange, blobPerSequence, 1, resources, txsimKeyringDir, t.knuu, upgradeSchedule) From 135e5e3342c0e9eca59adb8fb07a581afd0da9cd Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Sun, 6 Oct 2024 18:04:01 -0400 Subject: [PATCH 20/31] try to copy validator keys into txSim keyring --- test/e2e/benchmark/benchmark.go | 9 +++++-- test/e2e/major_upgrade_v2.go | 3 +-- test/e2e/major_upgrade_v3.go | 8 +----- test/e2e/minor_version_compatibility.go | 3 +-- test/e2e/simple.go | 3 +-- test/e2e/testnet/testnet.go | 36 +++++++++++++++---------- 6 files changed, 33 insertions(+), 29 deletions(-) diff --git a/test/e2e/benchmark/benchmark.go b/test/e2e/benchmark/benchmark.go index 81b2748cb1..4dbafc778e 100644 --- a/test/e2e/benchmark/benchmark.go +++ b/test/e2e/benchmark/benchmark.go @@ -56,11 +56,16 @@ func (b *BenchmarkTest) SetupNodes() error { // create tx clients and point them to the validators log.Println("Creating tx clients") - err = b.CreateTxClients(ctx, b.manifest.TxClientVersion, + err = b.CreateTxClients( + ctx, + b.manifest.TxClientVersion, b.manifest.BlobSequences, b.manifest.BlobSizes, b.manifest.BlobsPerSeq, - b.manifest.TxClientsResource, gRPCEndpoints) + b.manifest.TxClientsResource, + gRPCEndpoints, + map[int64]uint64{}, + ) testnet.NoError("failed to create tx clients", err) log.Println("Setting up testnet") diff --git a/test/e2e/major_upgrade_v2.go b/test/e2e/major_upgrade_v2.go index ed026ed440..f1e2b1cb80 100644 --- a/test/e2e/major_upgrade_v2.go +++ b/test/e2e/major_upgrade_v2.go @@ -12,7 +12,6 @@ import ( v1 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v1" v2 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v2" "github.com/celestiaorg/celestia-app/v3/test/e2e/testnet" - "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/rpc/client/http" ) @@ -53,7 +52,7 @@ func MajorUpgradeToV2(logger *log.Logger) error { logger.Println("Creating txsim") endpoints, err := testNet.RemoteGRPCEndpoints(ctx) testnet.NoError("failed to get remote gRPC endpoints", err) - err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil, []crypto.PrivKey{}) + err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnet") diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go index dc68376c99..8db74c9142 100644 --- a/test/e2e/major_upgrade_v3.go +++ b/test/e2e/major_upgrade_v3.go @@ -10,7 +10,6 @@ import ( v2 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v2" v3 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v3" "github.com/celestiaorg/celestia-app/v3/test/e2e/testnet" - "github.com/tendermint/tendermint/crypto" ) func MajorUpgradeToV3(logger *log.Logger) error { @@ -55,12 +54,7 @@ func MajorUpgradeToV3(logger *log.Logger) error { upgradeHeightV3: v3.Version, } - nodeKeys := []crypto.PrivKey{} - for _, node := range testNet.Nodes() { - nodeKeys = append(nodeKeys, node.SignerKey) - } - - err = testNet.CreateTxClient(ctx, "txsim", version, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule, nodeKeys) + err = testNet.CreateTxClient(ctx, "txsim", version, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnet") diff --git a/test/e2e/minor_version_compatibility.go b/test/e2e/minor_version_compatibility.go index 766a18078f..bf058bb886 100644 --- a/test/e2e/minor_version_compatibility.go +++ b/test/e2e/minor_version_compatibility.go @@ -15,7 +15,6 @@ import ( v1 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v1" v2 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v2" "github.com/celestiaorg/celestia-app/v3/test/e2e/testnet" - "github.com/tendermint/tendermint/crypto" ) func MinorVersionCompatibility(logger *log.Logger) error { @@ -64,7 +63,7 @@ func MinorVersionCompatibility(logger *log.Logger) error { logger.Println("Creating txsim") endpoints, err := testNet.RemoteGRPCEndpoints(ctx) testnet.NoError("failed to get remote gRPC endpoints", err) - err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil, []crypto.PrivKey{}) + err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil) testnet.NoError("failed to create tx client", err) // start the testnet diff --git a/test/e2e/simple.go b/test/e2e/simple.go index 6cd79c1528..218b7c95d4 100644 --- a/test/e2e/simple.go +++ b/test/e2e/simple.go @@ -9,7 +9,6 @@ import ( "github.com/celestiaorg/celestia-app/v3/pkg/appconsts" "github.com/celestiaorg/celestia-app/v3/test/e2e/testnet" "github.com/celestiaorg/celestia-app/v3/test/util/testnode" - "github.com/tendermint/tendermint/crypto" ) // This test runs a simple testnet with 4 validators. It submits both MsgPayForBlobs @@ -36,7 +35,7 @@ func E2ESimple(logger *log.Logger) error { logger.Println("Creating txsim") endpoints, err := testNet.RemoteGRPCEndpoints(ctx) testnet.NoError("failed to get remote gRPC endpoints", err) - err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 10, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil, []crypto.PrivKey{}) + err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 10, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnets") diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index 57779904ad..0938eabb14 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -17,7 +17,6 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/keyring" "github.com/rs/zerolog/log" - "github.com/tendermint/tendermint/crypto" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) @@ -112,11 +111,10 @@ func (t *Testnet) CreateTxClients(ctx context.Context, resources Resources, grpcEndpoints []string, upgradeSchedule map[int64]uint64, - validatorKeys []crypto.PrivKey, ) error { for i, grpcEndpoint := range grpcEndpoints { name := fmt.Sprintf("txsim%d", i) - err := t.CreateTxClient(ctx, name, version, sequences, blobRange, blobPerSequence, resources, grpcEndpoint, upgradeSchedule, validatorKeys) + err := t.CreateTxClient(ctx, name, version, sequences, blobRange, blobPerSequence, resources, grpcEndpoint, upgradeSchedule) if err != nil { log.Err(err).Str("name", name). Str("grpc endpoint", grpcEndpoint). @@ -149,9 +147,6 @@ func (t *Testnet) CreateTxClient( grpcEndpoint string, // upgradeSchedule is a map from height to version, specifying the version to upgrade to at the given height upgradeSchedule map[int64]uint64, - // validatorKeys is a list of validator keys to be used by the txsim. This - // is needed so that txSim can signal for versions on behalf of validators. - validatorKeys []crypto.PrivKey, ) error { // Create an account, and store it in a temp directory and add the account as genesis account to // the testnet. @@ -160,9 +155,22 @@ func (t *Testnet) CreateTxClient( Str("name", name). Str("directory", txsimKeyringDir). Msg("txsim keyring directory created") - _, err := t.CreateAccount(name, 1e16, txsimKeyringDir) - if err != nil { - return err + kr, err := t.CreateAccount(name, 1e16, txsimKeyringDir) + + // nodeKeys := []crypto.PrivKey{} + for _, node := range t.Nodes() { + nodeName := node.Name + fmt.Printf("nodeName %v\n", nodeName) + armor, err := t.Genesis().Keyring().ExportPrivKeyArmor(nodeName, "") + if err != nil { + return err + } + fmt.Printf("armor %v\n", armor) + err = kr.ImportPrivKey(nodeName, armor, "") + if err != nil { + return err + } + fmt.Printf("imported %v into kr successfully\n", nodeName) } // Iterate over the Tendermint private keys and import them into the Cosmos SDK keyring @@ -261,11 +269,7 @@ func (t *Testnet) CreateAccount(name string, tokens int64, txsimKeyringDir strin func (t *Testnet) CreateNode(ctx context.Context, version string, startHeight, upgradeHeight int64, resources Resources, disableBBR bool) error { signerKey := t.keygen.Generate(ed25519Type) networkKey := t.keygen.Generate(ed25519Type) - node, err := NewNode(ctx, - fmt.Sprintf("val%d", len(t.nodes)), version, - startHeight, 0, nil, signerKey, networkKey, - upgradeHeight, resources, t.grafana, t.knuu, disableBBR, - ) + node, err := NewNode(ctx, fmt.Sprintf("val%d", len(t.nodes)), version, startHeight, 0, nil, signerKey, networkKey, upgradeHeight, resources, t.grafana, t.knuu, disableBBR) if err != nil { return err } @@ -450,3 +454,7 @@ func (t *Testnet) Node(i int) *Node { func (t *Testnet) Nodes() []*Node { return t.nodes } + +func (t *Testnet) Genesis() *genesis.Genesis { + return t.genesis +} From c015c07e295d63aac0338df213b9eeec97c2ffcd Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Sun, 6 Oct 2024 18:50:03 -0400 Subject: [PATCH 21/31] no accounts found in keyring --- test/e2e/testnet/testnet.go | 84 +++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 27 deletions(-) diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index 0938eabb14..3aad266a7f 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -148,36 +148,65 @@ func (t *Testnet) CreateTxClient( // upgradeSchedule is a map from height to version, specifying the version to upgrade to at the given height upgradeSchedule map[int64]uint64, ) error { - // Create an account, and store it in a temp directory and add the account as genesis account to - // the testnet. txsimKeyringDir := filepath.Join(os.TempDir(), name) - log.Info(). - Str("name", name). - Str("directory", txsimKeyringDir). - Msg("txsim keyring directory created") - kr, err := t.CreateAccount(name, 1e16, txsimKeyringDir) + defer os.RemoveAll(txsimKeyringDir) + cdc := encoding.MakeConfig(app.ModuleEncodingRegisters...).Codec + txsimKeyring, err := keyring.New(app.Name, keyring.BackendTest, txsimKeyringDir, nil, cdc) + if err != nil { + return fmt.Errorf("failed to create keyring: %w", err) + } + + key, _, err := txsimKeyring.NewMnemonic(name, keyring.English, "", "", hd.Secp256k1) + if err != nil { + return fmt.Errorf("failed to create mnemonic: %w", err) + } + pk, err := key.GetPubKey() + if err != nil { + return fmt.Errorf("failed to get public key: %w", err) + } + err = t.genesis.AddAccount(genesis.Account{ + PubKey: pk, + Balance: 500000, + Name: name, + }) + if err != nil { + return fmt.Errorf("failed to add account to genesis: %w", err) + } + fmt.Printf("before copy") + records, err := txsimKeyring.List() + if err != nil { + return fmt.Errorf("failed to list keys: %w", err) + } + for _, record := range records { + fmt.Printf("kr record name %v\n", record.Name) + } - // nodeKeys := []crypto.PrivKey{} + // Copy the keys from the genesis keyring to the txsim keyring for _, node := range t.Nodes() { nodeName := node.Name fmt.Printf("nodeName %v\n", nodeName) armor, err := t.Genesis().Keyring().ExportPrivKeyArmor(nodeName, "") if err != nil { - return err + return fmt.Errorf("failed to export key: %w", err) } - fmt.Printf("armor %v\n", armor) - err = kr.ImportPrivKey(nodeName, armor, "") + err = txsimKeyring.ImportPrivKey(nodeName, armor, "") if err != nil { - return err + return fmt.Errorf("failed to import key: %w", err) } - fmt.Printf("imported %v into kr successfully\n", nodeName) + fmt.Printf("imported %v into txsimKeyring successfully\n", nodeName) } - // Iterate over the Tendermint private keys and import them into the Cosmos SDK keyring - // TODO take the validatorKeys and add them to the keyring or txsimKeyringDir. + fmt.Printf("after copy") + records, err = txsimKeyring.List() + if err != nil { + return fmt.Errorf("failed to list keys: %w", err) + } + for _, record := range records { + fmt.Printf("kr record name %v\n", record.Name) + } - // Create a txsim node using the key stored in the txsimKeyringDir. txsim, err := CreateTxClient(ctx, name, version, grpcEndpoint, t.seed, blobSequences, blobRange, blobPerSequence, 1, resources, txsimKeyringDir, t.knuu, upgradeSchedule) + err = txsim.Instance.Build().Commit(ctx) if err != nil { log.Err(err). @@ -185,17 +214,6 @@ func (t *Testnet) CreateTxClient( Msg("error committing txsim") return err } - - // Copy over the keyring directory to the txsim instance. - err = txsim.Instance.Storage().AddFolder(txsimKeyringDir, remoteRootDir, "10001:10001") - if err != nil { - log.Err(err). - Str("directory", txsimKeyringDir). - Str("name", name). - Msg("error adding keyring dir to txsim") - return err - } - t.txClients = append(t.txClients, txsim) return nil } @@ -224,6 +242,18 @@ func (t *Testnet) StartTxClients(ctx context.Context) error { return nil } +func createTxsimKeyringDir(name string, kr keyring.Keyring) string { + // Create an account, and store it in a temp directory and add the account as genesis account to + // the testnet. + txsimKeyringDir := filepath.Join(os.TempDir(), name) + log.Info(). + Str("name", name). + Str("directory", txsimKeyringDir). + Msg("txsim keyring directory created") + + return txsimKeyringDir +} + // CreateAccount creates an account and adds it to the // testnet genesis. The account is created with the given name and tokens and // is persisted in the given txsimKeyringDir. From 8990155b4f074ea91fd9ff1d4d29823930a206d5 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Sun, 6 Oct 2024 19:45:29 -0400 Subject: [PATCH 22/31] add keys to txsim works --- test/e2e/testnet/testnet.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index 3aad266a7f..8fad508fe7 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -166,7 +166,7 @@ func (t *Testnet) CreateTxClient( } err = t.genesis.AddAccount(genesis.Account{ PubKey: pk, - Balance: 500000, + Balance: 1e16, Name: name, }) if err != nil { @@ -214,6 +214,12 @@ func (t *Testnet) CreateTxClient( Msg("error committing txsim") return err } + + // copy over the keyring directory to the txsim instance + // txsimRootDir + // txsimRootDir = "/home/celestia" + err = txsim.Instance.Storage().AddFolder(txsimKeyringDir, txsimKeyringDir, "10001:10001") + t.txClients = append(t.txClients, txsim) return nil } From 57648aabefb27898ccd44d1f28f27795bf68c60c Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Sun, 6 Oct 2024 19:57:06 -0400 Subject: [PATCH 23/31] add comments for upgrade sequence b/c it is currently broken --- test/cmd/txsim/cli.go | 12 ------------ test/txsim/upgrade.go | 27 +++++++++++++++++---------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/test/cmd/txsim/cli.go b/test/cmd/txsim/cli.go index 9c6ec05d59..d6902d751d 100644 --- a/test/cmd/txsim/cli.go +++ b/test/cmd/txsim/cli.go @@ -90,18 +90,6 @@ well funded account that can act as the master account. The command runs until a if err != nil { return err } - fmt.Printf("keys: %v\n", keys) - records, err := keys.List() - if err != nil { - return err - } - for _, record := range records { - address, err := record.GetAddress() - if err != nil { - return err - } - fmt.Printf("reccord name: %v address %v\n", record.Name, address.String()) - } // get the rpc and grpc endpoints if grpcEndpoint == "" { diff --git a/test/txsim/upgrade.go b/test/txsim/upgrade.go index 0811f32232..25fa6c2f4f 100644 --- a/test/txsim/upgrade.go +++ b/test/txsim/upgrade.go @@ -15,17 +15,24 @@ var _ Sequence = &UpgradeSequence{} const fundsForUpgrade = 100_000 -// UpgradeSequence simulates an upgrade proposal and voting process +// UpgradeSequence simulates a sequence of validators submitting +// MsgSignalVersions for a particular version and then eventually a +// MsgTryUpgrade. type UpgradeSequence struct { - voted map[string]bool - height int64 - version uint64 - account types.AccAddress + // signalled is a map from validator address to a boolean indicating if they have signalled. + signalled map[string]bool + // height is the first height at which the upgrade sequence is run. + height int64 + // version is the version that validators are signalling for. + version uint64 + // account is the address of the account that submits the MsgTryUpgrade. + account types.AccAddress + // hasUpgraded is true if the MsgTryUpgrade has been submitted. hasUpgraded bool } func NewUpgradeSequence(version uint64, height int64) *UpgradeSequence { - return &UpgradeSequence{version: version, height: height, voted: make(map[string]bool)} + return &UpgradeSequence{version: version, height: height, signalled: make(map[string]bool)} } func (s *UpgradeSequence) Clone(_ int) []Sequence { @@ -55,12 +62,12 @@ func (s *UpgradeSequence) Next(ctx context.Context, querier grpc.ClientConn, _ * // Choose a random validator to be the authority var msg types.Msg for _, validator := range validatorsResp.Validators { - if !s.voted[validator.OperatorAddress] { + if !s.signalled[validator.OperatorAddress] { msg = &signaltypes.MsgSignalVersion{ ValidatorAddress: validator.OperatorAddress, Version: s.version, } - s.voted[validator.OperatorAddress] = true + s.signalled[validator.OperatorAddress] = true } } // if all validators have voted, we can now try to upgrade. @@ -70,8 +77,8 @@ func (s *UpgradeSequence) Next(ctx context.Context, querier grpc.ClientConn, _ * } delay := uint64(0) - // apply a delay to the first sequence only - if len(s.voted) == 0 { + // apply a delay to the first signal only + if len(s.signalled) == 0 { delay = uint64(s.height) } From 762978eb68569a6f40dc5760bbc00856c2aa3b7b Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Sun, 6 Oct 2024 20:07:54 -0400 Subject: [PATCH 24/31] cant see logs for txsim --- test/cmd/txsim/cli.go | 1 + test/txsim/upgrade.go | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/test/cmd/txsim/cli.go b/test/cmd/txsim/cli.go index d6902d751d..60b0d1747f 100644 --- a/test/cmd/txsim/cli.go +++ b/test/cmd/txsim/cli.go @@ -144,6 +144,7 @@ well funded account that can act as the master account. The command runs until a } for height, version := range upgradeScheduleMap { + fmt.Printf("creating new upgrade sequence for height %v and version %v\n", height, version) sequences = append(sequences, txsim.NewUpgradeSequence(version, height)) } diff --git a/test/txsim/upgrade.go b/test/txsim/upgrade.go index 25fa6c2f4f..ba62fafe8c 100644 --- a/test/txsim/upgrade.go +++ b/test/txsim/upgrade.go @@ -3,6 +3,7 @@ package txsim import ( "context" "errors" + "fmt" "math/rand" signaltypes "github.com/celestiaorg/celestia-app/v3/x/signal/types" @@ -51,6 +52,7 @@ func (s *UpgradeSequence) Next(ctx context.Context, querier grpc.ClientConn, _ * stakingQuerier := stakingtypes.NewQueryClient(querier) validatorsResp, err := stakingQuerier.Validators(ctx, &stakingtypes.QueryValidatorsRequest{}) + fmt.Printf("validators: %v\n", validatorsResp.Validators) if err != nil { return Operation{}, err } @@ -62,16 +64,20 @@ func (s *UpgradeSequence) Next(ctx context.Context, querier grpc.ClientConn, _ * // Choose a random validator to be the authority var msg types.Msg for _, validator := range validatorsResp.Validators { + fmt.Printf("validator: %v\n", validator) if !s.signalled[validator.OperatorAddress] { msg = &signaltypes.MsgSignalVersion{ ValidatorAddress: validator.OperatorAddress, Version: s.version, } + fmt.Printf("msg %v\n", msg) s.signalled[validator.OperatorAddress] = true + fmt.Printf("marking %v as signalled", validator.OperatorAddress) } } // if all validators have voted, we can now try to upgrade. if msg == nil { + fmt.Printf("all validators have signalled so we can try to upgrade") msg = signaltypes.NewMsgTryUpgrade(s.account) s.hasUpgraded = true } @@ -79,6 +85,7 @@ func (s *UpgradeSequence) Next(ctx context.Context, querier grpc.ClientConn, _ * delay := uint64(0) // apply a delay to the first signal only if len(s.signalled) == 0 { + fmt.Printf("applying delay to first signal") delay = uint64(s.height) } From 713bd50a160d78b49da72f250a21a21d2d9a37b5 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Sun, 6 Oct 2024 23:09:41 -0400 Subject: [PATCH 25/31] fix: upgrade sequence --- test/txsim/upgrade.go | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/test/txsim/upgrade.go b/test/txsim/upgrade.go index ba62fafe8c..a862cb9e4a 100644 --- a/test/txsim/upgrade.go +++ b/test/txsim/upgrade.go @@ -61,34 +61,34 @@ func (s *UpgradeSequence) Next(ctx context.Context, querier grpc.ClientConn, _ * return Operation{}, errors.New("no validators found") } + delay := uint64(0) + // apply a delay to the first signal only + if len(s.signalled) == 0 { + fmt.Printf("applying delay to first signal") + delay = uint64(s.height) + } + // Choose a random validator to be the authority - var msg types.Msg for _, validator := range validatorsResp.Validators { fmt.Printf("validator: %v\n", validator) if !s.signalled[validator.OperatorAddress] { - msg = &signaltypes.MsgSignalVersion{ + fmt.Printf("marking %v as signalled", validator.OperatorAddress) + s.signalled[validator.OperatorAddress] = true + msg := &signaltypes.MsgSignalVersion{ ValidatorAddress: validator.OperatorAddress, Version: s.version, } - fmt.Printf("msg %v\n", msg) - s.signalled[validator.OperatorAddress] = true - fmt.Printf("marking %v as signalled", validator.OperatorAddress) + return Operation{ + Msgs: []types.Msg{msg}, + Delay: delay, + }, nil } } - // if all validators have voted, we can now try to upgrade. - if msg == nil { - fmt.Printf("all validators have signalled so we can try to upgrade") - msg = signaltypes.NewMsgTryUpgrade(s.account) - s.hasUpgraded = true - } - - delay := uint64(0) - // apply a delay to the first signal only - if len(s.signalled) == 0 { - fmt.Printf("applying delay to first signal") - delay = uint64(s.height) - } + // if all validators have voted, we can now try to upgrade. + fmt.Printf("all validators have signalled so we can try to upgrade") + s.hasUpgraded = true + msg := signaltypes.NewMsgTryUpgrade(s.account) return Operation{ Msgs: []types.Msg{msg}, Delay: delay, From acc95b0975f113b9a09e095515bef202e4a57f06 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Sun, 6 Oct 2024 23:29:01 -0400 Subject: [PATCH 26/31] cleanup revert as much as possible --- test/cmd/txsim/cli.go | 2 - test/e2e/benchmark/benchmark.go | 2 +- test/e2e/major_upgrade_v2.go | 3 +- test/e2e/major_upgrade_v3.go | 2 +- test/e2e/minor_version_compatibility.go | 3 +- test/e2e/simple.go | 3 +- test/e2e/testnet/node.go | 1 + test/e2e/testnet/testnet.go | 53 +++++++++---------------- test/e2e/testnet/txsimNode.go | 5 ++- test/txsim/upgrade.go | 6 --- 10 files changed, 31 insertions(+), 49 deletions(-) diff --git a/test/cmd/txsim/cli.go b/test/cmd/txsim/cli.go index 60b0d1747f..55cac6d4fd 100644 --- a/test/cmd/txsim/cli.go +++ b/test/cmd/txsim/cli.go @@ -138,13 +138,11 @@ well funded account that can act as the master account. The command runs until a } upgradeScheduleMap, err := parseUpgradeSchedule(upgradeSchedule) - fmt.Printf("upgradeScheduleMap: %v\n", upgradeScheduleMap) if err != nil { return fmt.Errorf("invalid upgrade schedule: %w", err) } for height, version := range upgradeScheduleMap { - fmt.Printf("creating new upgrade sequence for height %v and version %v\n", height, version) sequences = append(sequences, txsim.NewUpgradeSequence(version, height)) } diff --git a/test/e2e/benchmark/benchmark.go b/test/e2e/benchmark/benchmark.go index 4dbafc778e..83843549ea 100644 --- a/test/e2e/benchmark/benchmark.go +++ b/test/e2e/benchmark/benchmark.go @@ -64,7 +64,7 @@ func (b *BenchmarkTest) SetupNodes() error { b.manifest.BlobsPerSeq, b.manifest.TxClientsResource, gRPCEndpoints, - map[int64]uint64{}, + map[int64]uint64{}, // upgrade schedule ) testnet.NoError("failed to create tx clients", err) diff --git a/test/e2e/major_upgrade_v2.go b/test/e2e/major_upgrade_v2.go index f1e2b1cb80..de4fd79709 100644 --- a/test/e2e/major_upgrade_v2.go +++ b/test/e2e/major_upgrade_v2.go @@ -52,7 +52,8 @@ func MajorUpgradeToV2(logger *log.Logger) error { logger.Println("Creating txsim") endpoints, err := testNet.RemoteGRPCEndpoints(ctx) testnet.NoError("failed to get remote gRPC endpoints", err) - err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil) + upgradeSchedule := map[int64]uint64{} + err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnet") diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go index 8db74c9142..70d83daa9c 100644 --- a/test/e2e/major_upgrade_v3.go +++ b/test/e2e/major_upgrade_v3.go @@ -25,7 +25,7 @@ func MajorUpgradeToV3(logger *log.Logger) error { defer testNet.Cleanup(ctx) // HACKHACK: use a version of celestia-app built from a commit on this PR. - // Do not merge as-is. + // This can be removed after the PR is merged to main. version := "pr-3910" logger.Println("Running major upgrade to v3 test", "version", version) diff --git a/test/e2e/minor_version_compatibility.go b/test/e2e/minor_version_compatibility.go index bf058bb886..fbd7fb971f 100644 --- a/test/e2e/minor_version_compatibility.go +++ b/test/e2e/minor_version_compatibility.go @@ -63,7 +63,8 @@ func MinorVersionCompatibility(logger *log.Logger) error { logger.Println("Creating txsim") endpoints, err := testNet.RemoteGRPCEndpoints(ctx) testnet.NoError("failed to get remote gRPC endpoints", err) - err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil) + upgradeSchedule := map[int64]uint64{} + err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 1, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule) testnet.NoError("failed to create tx client", err) // start the testnet diff --git a/test/e2e/simple.go b/test/e2e/simple.go index 218b7c95d4..242c4ecde2 100644 --- a/test/e2e/simple.go +++ b/test/e2e/simple.go @@ -35,7 +35,8 @@ func E2ESimple(logger *log.Logger) error { logger.Println("Creating txsim") endpoints, err := testNet.RemoteGRPCEndpoints(ctx) testnet.NoError("failed to get remote gRPC endpoints", err) - err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 10, "100-2000", 100, testnet.DefaultResources, endpoints[0], nil) + upgradeSchedule := map[int64]uint64{} + err = testNet.CreateTxClient(ctx, "txsim", testnet.TxsimVersion, 10, "100-2000", 100, testnet.DefaultResources, endpoints[0], upgradeSchedule) testnet.NoError("failed to create tx client", err) logger.Println("Setting up testnets") diff --git a/test/e2e/testnet/node.go b/test/e2e/testnet/node.go index 33c71cb190..cf96ee905d 100644 --- a/test/e2e/testnet/node.go +++ b/test/e2e/testnet/node.go @@ -36,6 +36,7 @@ const ( secp256k1Type = "secp256k1" ed25519Type = "ed25519" remoteRootDir = "/home/celestia/.celestia-app" + txsimRootDir = "/home/celestia" ) type Node struct { diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index 8fad508fe7..2bb92fad0d 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -150,8 +150,9 @@ func (t *Testnet) CreateTxClient( ) error { txsimKeyringDir := filepath.Join(os.TempDir(), name) defer os.RemoveAll(txsimKeyringDir) - cdc := encoding.MakeConfig(app.ModuleEncodingRegisters...).Codec - txsimKeyring, err := keyring.New(app.Name, keyring.BackendTest, txsimKeyringDir, nil, cdc) + + config := encoding.MakeConfig(app.ModuleEncodingRegisters...).Codec + txsimKeyring, err := keyring.New(app.Name, keyring.BackendTest, txsimKeyringDir, nil, config) if err != nil { return fmt.Errorf("failed to create keyring: %w", err) } @@ -172,16 +173,9 @@ func (t *Testnet) CreateTxClient( if err != nil { return fmt.Errorf("failed to add account to genesis: %w", err) } - fmt.Printf("before copy") - records, err := txsimKeyring.List() - if err != nil { - return fmt.Errorf("failed to list keys: %w", err) - } - for _, record := range records { - fmt.Printf("kr record name %v\n", record.Name) - } - // Copy the keys from the genesis keyring to the txsim keyring + // Copy the keys from the genesis keyring to the txsim keyring so that txsim + // can submit MsgSignalVersion on behalf of the validators. for _, node := range t.Nodes() { nodeName := node.Name fmt.Printf("nodeName %v\n", nodeName) @@ -193,20 +187,16 @@ func (t *Testnet) CreateTxClient( if err != nil { return fmt.Errorf("failed to import key: %w", err) } - fmt.Printf("imported %v into txsimKeyring successfully\n", nodeName) } - fmt.Printf("after copy") - records, err = txsimKeyring.List() + txsim, err := CreateTxClient(ctx, name, version, grpcEndpoint, t.seed, blobSequences, blobRange, blobPerSequence, 1, resources, txsimKeyringDir, t.knuu, upgradeSchedule) if err != nil { - return fmt.Errorf("failed to list keys: %w", err) - } - for _, record := range records { - fmt.Printf("kr record name %v\n", record.Name) + log.Err(err). + Str("name", name). + Msg("error creating txsim") + return err } - txsim, err := CreateTxClient(ctx, name, version, grpcEndpoint, t.seed, blobSequences, blobRange, blobPerSequence, 1, resources, txsimKeyringDir, t.knuu, upgradeSchedule) - err = txsim.Instance.Build().Commit(ctx) if err != nil { log.Err(err). @@ -216,9 +206,14 @@ func (t *Testnet) CreateTxClient( } // copy over the keyring directory to the txsim instance - // txsimRootDir - // txsimRootDir = "/home/celestia" - err = txsim.Instance.Storage().AddFolder(txsimKeyringDir, txsimKeyringDir, "10001:10001") + err = txsim.Instance.Storage().AddFolder(txsimKeyringDir, txsimRootDir, "10001:10001") + if err != nil { + log.Err(err). + Str("directory", txsimKeyringDir). + Str("name", name). + Msg("error adding keyring dir to txsim") + return err + } t.txClients = append(t.txClients, txsim) return nil @@ -248,18 +243,6 @@ func (t *Testnet) StartTxClients(ctx context.Context) error { return nil } -func createTxsimKeyringDir(name string, kr keyring.Keyring) string { - // Create an account, and store it in a temp directory and add the account as genesis account to - // the testnet. - txsimKeyringDir := filepath.Join(os.TempDir(), name) - log.Info(). - Str("name", name). - Str("directory", txsimKeyringDir). - Msg("txsim keyring directory created") - - return txsimKeyringDir -} - // CreateAccount creates an account and adds it to the // testnet genesis. The account is created with the given name and tokens and // is persisted in the given txsimKeyringDir. diff --git a/test/e2e/testnet/txsimNode.go b/test/e2e/testnet/txsimNode.go index df9e15b6ce..bfa21da875 100644 --- a/test/e2e/testnet/txsimNode.go +++ b/test/e2e/testnet/txsimNode.go @@ -46,7 +46,10 @@ func CreateTxClient( return nil, err } image := txsimDockerImageName(version) - fmt.Printf("txsimDocker image: %s\n", image) + log.Info(). + Str("name", name). + Str("image", image). + Msg("setting image for tx client") err = instance.Build().SetImage(ctx, image) if err != nil { log.Err(err). diff --git a/test/txsim/upgrade.go b/test/txsim/upgrade.go index a862cb9e4a..e2015b98d1 100644 --- a/test/txsim/upgrade.go +++ b/test/txsim/upgrade.go @@ -3,7 +3,6 @@ package txsim import ( "context" "errors" - "fmt" "math/rand" signaltypes "github.com/celestiaorg/celestia-app/v3/x/signal/types" @@ -52,7 +51,6 @@ func (s *UpgradeSequence) Next(ctx context.Context, querier grpc.ClientConn, _ * stakingQuerier := stakingtypes.NewQueryClient(querier) validatorsResp, err := stakingQuerier.Validators(ctx, &stakingtypes.QueryValidatorsRequest{}) - fmt.Printf("validators: %v\n", validatorsResp.Validators) if err != nil { return Operation{}, err } @@ -64,15 +62,12 @@ func (s *UpgradeSequence) Next(ctx context.Context, querier grpc.ClientConn, _ * delay := uint64(0) // apply a delay to the first signal only if len(s.signalled) == 0 { - fmt.Printf("applying delay to first signal") delay = uint64(s.height) } // Choose a random validator to be the authority for _, validator := range validatorsResp.Validators { - fmt.Printf("validator: %v\n", validator) if !s.signalled[validator.OperatorAddress] { - fmt.Printf("marking %v as signalled", validator.OperatorAddress) s.signalled[validator.OperatorAddress] = true msg := &signaltypes.MsgSignalVersion{ ValidatorAddress: validator.OperatorAddress, @@ -86,7 +81,6 @@ func (s *UpgradeSequence) Next(ctx context.Context, querier grpc.ClientConn, _ * } // if all validators have voted, we can now try to upgrade. - fmt.Printf("all validators have signalled so we can try to upgrade") s.hasUpgraded = true msg := signaltypes.NewMsgTryUpgrade(s.account) return Operation{ From 964112984f47b7d5052fffaf96172ad09f5c0fb5 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Sun, 6 Oct 2024 23:43:52 -0400 Subject: [PATCH 27/31] cleanup --- test/e2e/testnet/testnet.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index 2bb92fad0d..5ef4b48039 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -177,13 +177,11 @@ func (t *Testnet) CreateTxClient( // Copy the keys from the genesis keyring to the txsim keyring so that txsim // can submit MsgSignalVersion on behalf of the validators. for _, node := range t.Nodes() { - nodeName := node.Name - fmt.Printf("nodeName %v\n", nodeName) - armor, err := t.Genesis().Keyring().ExportPrivKeyArmor(nodeName, "") + armor, err := t.Genesis().Keyring().ExportPrivKeyArmor(node.Name, "") if err != nil { return fmt.Errorf("failed to export key: %w", err) } - err = txsimKeyring.ImportPrivKey(nodeName, armor, "") + err = txsimKeyring.ImportPrivKey(node.Name, armor, "") if err != nil { return fmt.Errorf("failed to import key: %w", err) } From 6e4fa05ad9ee33a8ace20e279535380e45aa4640 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 7 Oct 2024 15:51:19 -0400 Subject: [PATCH 28/31] convert print to log --- test/e2e/major_upgrade_v3.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go index 70d83daa9c..55dde9dfdc 100644 --- a/test/e2e/major_upgrade_v3.go +++ b/test/e2e/major_upgrade_v3.go @@ -84,7 +84,7 @@ func MajorUpgradeToV3(logger *log.Logger) error { if resp.Header.Version.App == v3.Version { upgradeComplete = true } - fmt.Println("height", resp.Header.Height) + logger.Printf("height %v", resp.Header.Height) lastHeight = resp.Header.Height } } From 11a01b071d280224ac1dbe750a5595069d99e826 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 7 Oct 2024 15:56:20 -0400 Subject: [PATCH 29/31] fix: CreateTxClient comment --- test/e2e/testnet/testnet.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index 5ef4b48039..402ca347ce 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -130,22 +130,26 @@ func (t *Testnet) CreateTxClients(ctx context.Context, } // CreateTxClient creates a txsim node and sets it up. +// +// Parameters: +// ctx: Context for managing the lifecycle. +// name: Name of the txsim knuu instance. +// version: Version of the txsim Docker image to pull. +// blobSequences: Number of blob sequences to run by the txsim. +// blobRange: Range of blob sizes in bytes used by the txsim. +// blobPerSequence: Number of blobs per sequence. +// resources: Resources allocated to the txsim. +// grpcEndpoint: gRPC endpoint of the node for transaction submission. +// upgradeSchedule: Map from height to version for scheduled upgrades (v3 and onwards). func (t *Testnet) CreateTxClient( ctx context.Context, - // name of the txsim knuu instance name string, - // version of the txsim docker image to be pulled from the registry version string, - // sequences: number of sequences to be run by the txsim blobSequences int, - // blobRange: range of blob sizes to be used by the txsim in bytes blobRange string, blobPerSequence int, - // resources: resources to be allocated to the txsim resources Resources, - // grpcEndpoint: grpc endpoint of the node to which the txsim will connect and send transactions grpcEndpoint string, - // upgradeSchedule is a map from height to version, specifying the version to upgrade to at the given height upgradeSchedule map[int64]uint64, ) error { txsimKeyringDir := filepath.Join(os.TempDir(), name) From eaa98a18fcfdc47141736c408d8772af301a1b46 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Tue, 8 Oct 2024 22:50:07 -0400 Subject: [PATCH 30/31] fix: copy keyring dir to correct destination --- test/e2e/testnet/testnet.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/testnet/testnet.go b/test/e2e/testnet/testnet.go index 402ca347ce..159d59ab96 100644 --- a/test/e2e/testnet/testnet.go +++ b/test/e2e/testnet/testnet.go @@ -208,7 +208,7 @@ func (t *Testnet) CreateTxClient( } // copy over the keyring directory to the txsim instance - err = txsim.Instance.Storage().AddFolder(txsimKeyringDir, txsimRootDir, "10001:10001") + err = txsim.Instance.Storage().AddFolder(txsimKeyringDir, txsimKeyringDir, "10001:10001") if err != nil { log.Err(err). Str("directory", txsimKeyringDir). From ae45da4a70cb17a6640524d0a78fd6107f062fd9 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Tue, 8 Oct 2024 23:07:22 -0400 Subject: [PATCH 31/31] fix: remove DefaultUpgradeHeightDelay override --- pkg/appconsts/global_consts.go | 5 +---- test/e2e/major_upgrade_v3.go | 5 +++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/pkg/appconsts/global_consts.go b/pkg/appconsts/global_consts.go index 46b715b7eb..2903da0414 100644 --- a/pkg/appconsts/global_consts.go +++ b/pkg/appconsts/global_consts.go @@ -30,10 +30,7 @@ const ( // DefaultUpgradeHeightDelay is the number of blocks after a quorum has been // reached that the chain should upgrade to the new version. Assuming a block // interval of 12 seconds, this is 7 days. - // DefaultUpgradeHeightDelay = int64(7 * 24 * 60 * 60 / 12) // 7 days * 24 hours * 60 minutes * 60 seconds / 12 seconds per block = 50,400 blocks. - - // HACKHACK: Override the default for the e2e test. Do not merge this as-is. - DefaultUpgradeHeightDelay = int64(1) + DefaultUpgradeHeightDelay = int64(7 * 24 * 60 * 60 / 12) // 7 days * 24 hours * 60 minutes * 60 seconds / 12 seconds per block = 50,400 blocks. ) var ( diff --git a/test/e2e/major_upgrade_v3.go b/test/e2e/major_upgrade_v3.go index 55dde9dfdc..22723125f2 100644 --- a/test/e2e/major_upgrade_v3.go +++ b/test/e2e/major_upgrade_v3.go @@ -25,8 +25,9 @@ func MajorUpgradeToV3(logger *log.Logger) error { defer testNet.Cleanup(ctx) // HACKHACK: use a version of celestia-app built from a commit on this PR. - // This can be removed after the PR is merged to main. - version := "pr-3910" + // This can be removed after the PR is merged to main and we override the + // upgrade height delay to one block in a new Docker image. + version := "1a20c01" logger.Println("Running major upgrade to v3 test", "version", version)