Skip to content

Commit ac2d950

Browse files
authored
fix(kt-devnet): adjust to possible multiple depsets (#15515)
The previous approach of associating a single dependency set to a devnet doesn't work anymore, as we're aiming to work with multiple interop sets, multiple supervisors, and so on. We're also importing the corresponding optimism-package version, and adjusting the interop devnet definition
1 parent de3a3e6 commit ac2d950

File tree

9 files changed

+63
-55
lines changed

9 files changed

+63
-55
lines changed

devnet-sdk/descriptors/deployment.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ type Wallet struct {
6464
// WalletMap is a map of wallet names to wallets.
6565
type WalletMap map[string]*Wallet
6666

67+
type DepSet = json.RawMessage
68+
6769
// DevnetEnvironment exposes the relevant information to interact with a devnet.
6870
type DevnetEnvironment struct {
6971
Name string `json:"name"`
@@ -73,6 +75,6 @@ type DevnetEnvironment struct {
7375
L1 *Chain `json:"l1"`
7476
L2 []*L2Chain `json:"l2"`
7577

76-
Features []string `json:"features,omitempty"`
77-
DepSet json.RawMessage `json:"dep_set,omitempty"`
78+
Features []string `json:"features,omitempty"`
79+
DepSets []DepSet `json:"dep_sets,omitempty"`
7880
}

devnet-sdk/devstack/sysext/system.go

+11-7
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,18 @@ func (o *Orchestrator) hydrateClusterMaybe(sys stack.ExtensibleSystem) {
2626
require := sys.T().Require()
2727
env := o.env
2828

29-
var depSet depset.StaticConfigDependencySet
30-
require.NoError(json.Unmarshal(o.env.Env.DepSet, &depSet))
29+
depsets := o.env.Env.DepSets
3130

32-
sys.AddCluster(shim.NewCluster(shim.ClusterConfig{
33-
CommonConfig: shim.NewCommonConfig(sys.T()),
34-
ID: stack.ClusterID(env.Env.Name),
35-
DependencySet: &depSet,
36-
}))
31+
for _, d := range depsets {
32+
var depSet depset.StaticConfigDependencySet
33+
require.NoError(json.Unmarshal(d, &depSet))
34+
35+
sys.AddCluster(shim.NewCluster(shim.ClusterConfig{
36+
CommonConfig: shim.NewCommonConfig(sys.T()),
37+
ID: stack.ClusterID(env.Env.Name),
38+
DependencySet: &depSet,
39+
}))
40+
}
3741
}
3842

3943
func (o *Orchestrator) hydrateSupervisorMaybe(sys stack.ExtensibleSystem) {

kurtosis-devnet/interop.yaml

+3-17
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,11 @@
1818
optimism_package:
1919
interop:
2020
enabled: true
21+
sets:
22+
- name: "interop-set"
23+
participants: "*"
2124
supervisor_params:
2225
image: {{ $local_images.op_supervisor }}
23-
dependency_set: |
24-
{
25-
"dependencies": {
26-
"2151908": {
27-
"chainIndex": "2151908",
28-
"activationTime": 0,
29-
"historyMinTime": 0
30-
},
31-
"2151909": {
32-
"chainIndex": "2151909",
33-
"activationTime": 0,
34-
"historyMinTime": 0
35-
}
36-
}
37-
}
38-
extra_params:
39-
- {{ $flags.log_level }}
4026
chains:
4127
- participants:
4228
- el_type: op-geth

kurtosis-devnet/optimism-package-trampoline/kurtosis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: github.com/ethereum-optimism/optimism/kurtosis-devnet/optimism-package-tra
22
description: |-
33
A trampoline package for optimism-package. This one is reproducible, due to the replace directives below.
44
replace:
5-
github.com/ethpandaops/optimism-package: github.com/ethpandaops/optimism-package@1cf76907eaa437ee9fcf902167714fece027962a
5+
github.com/ethpandaops/optimism-package: github.com/ethpandaops/optimism-package@07fcbfb17fdf00f048242c938471849bba128bf0
66
github.com/ethpandaops/ethereum-package: github.com/ethpandaops/ethereum-package@83830d44823767af65eda7dfe6b26c87c536c4cf
77
github.com/kurtosis-tech/prometheus-package: github.com/kurtosis-tech/prometheus-package@f5ce159aec728898e3deb827f6b921f8ecfc527f
88
github.com/kurtosis-tech/postgres-package: github.com/kurtosis-tech/postgres-package@2d363be1bc42524f6b0575cac0bbc0fd194ae173

kurtosis-devnet/pkg/kurtosis/adapters.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ package kurtosis
22

33
import (
44
"context"
5-
"encoding/json"
65
"io"
76

7+
"github.com/ethereum-optimism/optimism/devnet-sdk/descriptors"
88
"github.com/ethereum-optimism/optimism/kurtosis-devnet/pkg/kurtosis/sources/deployer"
99
"github.com/ethereum-optimism/optimism/kurtosis-devnet/pkg/kurtosis/sources/depset"
1010
"github.com/ethereum-optimism/optimism/kurtosis-devnet/pkg/kurtosis/sources/inspect"
@@ -47,7 +47,7 @@ var _ interfaces.JWTExtractor = (*enclaveJWTAdapter)(nil)
4747

4848
type enclaveDepsetAdapter struct{}
4949

50-
func (a *enclaveDepsetAdapter) ExtractData(ctx context.Context, enclave string) (json.RawMessage, error) {
50+
func (a *enclaveDepsetAdapter) ExtractData(ctx context.Context, enclave string) ([]descriptors.DepSet, error) {
5151
return depset.NewExtractor(enclave).ExtractData(ctx)
5252
}
5353

kurtosis-devnet/pkg/kurtosis/kurtosis.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package kurtosis
33
import (
44
"bytes"
55
"context"
6-
"encoding/json"
76
"fmt"
87
"io"
98

@@ -175,9 +174,9 @@ func (d *KurtosisDeployer) GetEnvironmentInfo(ctx context.Context, s *spec.Encla
175174
}
176175

177176
// Get dependency set
178-
var depsetData json.RawMessage
177+
var depsets []descriptors.DepSet
179178
if s.Features.Contains(spec.FeatureInterop) {
180-
depsetData, err = d.depsetExtractor.ExtractData(ctx, d.enclave)
179+
depsets, err = d.depsetExtractor.ExtractData(ctx, d.enclave)
181180
if err != nil {
182181
return nil, fmt.Errorf("failed to extract dependency set: %w", err)
183182
}
@@ -190,7 +189,7 @@ func (d *KurtosisDeployer) GetEnvironmentInfo(ctx context.Context, s *spec.Encla
190189

191190
L2: make([]*descriptors.L2Chain, 0, len(s.Chains)),
192191
Features: s.Features,
193-
DepSet: depsetData,
192+
DepSets: depsets,
194193
},
195194
}
196195

kurtosis-devnet/pkg/kurtosis/kurtosis_test.go

+8-9
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package kurtosis
22

33
import (
44
"context"
5-
"encoding/json"
65
"fmt"
76
"io"
87
"strings"
@@ -119,11 +118,11 @@ func (f *fakeJWTExtractor) ExtractData(ctx context.Context, enclave string) (*jw
119118
}
120119

121120
type fakeDepsetExtractor struct {
122-
data json.RawMessage
121+
data []descriptors.DepSet
123122
err error
124123
}
125124

126-
func (f *fakeDepsetExtractor) ExtractData(ctx context.Context, enclave string) (json.RawMessage, error) {
125+
func (f *fakeDepsetExtractor) ExtractData(ctx context.Context, enclave string) ([]descriptors.DepSet, error) {
127126
return f.data, f.err
128127
}
129128

@@ -346,7 +345,7 @@ func TestGetEnvironmentInfo(t *testing.T) {
346345
},
347346
},
348347
},
349-
DepSet: nil,
348+
DepSets: nil,
350349
},
351350
},
352351
},
@@ -428,7 +427,7 @@ func TestGetEnvironmentInfo(t *testing.T) {
428427
},
429428
},
430429
Features: spec.FeatureList{spec.FeatureInterop},
431-
DepSet: json.RawMessage(`{}`),
430+
DepSets: []descriptors.DepSet{descriptors.DepSet(`{}`)},
432431
},
433432
},
434433
},
@@ -489,7 +488,7 @@ func TestGetEnvironmentInfo(t *testing.T) {
489488
},
490489
},
491490
Features: spec.FeatureList{},
492-
DepSet: nil,
491+
DepSets: nil,
493492
},
494493
},
495494
},
@@ -503,9 +502,9 @@ func TestGetEnvironmentInfo(t *testing.T) {
503502
}
504503

505504
// Create depset data based on whether interop is enabled
506-
var depsetData json.RawMessage
505+
var depsets []descriptors.DepSet
507506
if tt.spec != nil && tt.spec.Features.Contains(spec.FeatureInterop) {
508-
depsetData = json.RawMessage(`{}`)
507+
depsets = []descriptors.DepSet{descriptors.DepSet(`{}`)}
509508
}
510509

511510
deployer, err := NewKurtosisDeployer(
@@ -523,7 +522,7 @@ func TestGetEnvironmentInfo(t *testing.T) {
523522
err: tt.err,
524523
}),
525524
WithKurtosisDepsetExtractor(&fakeDepsetExtractor{
526-
data: depsetData,
525+
data: depsets,
527526
err: tt.err,
528527
}),
529528
)

kurtosis-devnet/pkg/kurtosis/sources/depset/depset.go

+29-11
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ package depset
33
import (
44
"bytes"
55
"context"
6-
"encoding/json"
76
"fmt"
7+
"strings"
88

9+
"github.com/ethereum-optimism/optimism/devnet-sdk/descriptors"
910
ktfs "github.com/ethereum-optimism/optimism/devnet-sdk/kt/fs"
1011
)
1112

1213
const (
13-
depsetFileName = "dependency_set.json"
14+
depsetFileNamePrefix = "dependency_set"
1415
)
1516

1617
// extractor implements the interfaces.DepsetExtractor interface
@@ -26,25 +27,42 @@ func NewExtractor(enclave string) *extractor {
2627
}
2728

2829
// ExtractData extracts dependency set from its respective artifact
29-
func (e *extractor) ExtractData(ctx context.Context) (json.RawMessage, error) {
30+
func (e *extractor) ExtractData(ctx context.Context) ([]descriptors.DepSet, error) {
3031
fs, err := ktfs.NewEnclaveFS(ctx, e.enclave)
3132
if err != nil {
3233
return nil, err
3334
}
3435

35-
return extractDepsetFromArtifact(ctx, fs, depsetFileName)
36+
return extractDepsetsFromArtifacts(ctx, fs)
3637
}
3738

38-
func extractDepsetFromArtifact(ctx context.Context, fs *ktfs.EnclaveFS, artifactName string) (json.RawMessage, error) {
39-
a, err := fs.GetArtifact(ctx, artifactName)
39+
func extractDepsetsFromArtifacts(ctx context.Context, fs *ktfs.EnclaveFS) ([]descriptors.DepSet, error) {
40+
allArtifacts, err := fs.GetAllArtifactNames(ctx)
4041
if err != nil {
41-
return nil, fmt.Errorf("failed to get artifact: %w", err)
42+
return nil, fmt.Errorf("failed to get all artifact names: %w", err)
4243
}
4344

44-
buffer := &bytes.Buffer{}
45-
if err := a.ExtractFiles(ktfs.NewArtifactFileWriter(depsetFileName, buffer)); err != nil {
46-
return nil, fmt.Errorf("failed to extract dependency set: %w", err)
45+
depsetArtifacts := make([]string, 0)
46+
for _, artifactName := range allArtifacts {
47+
if strings.HasPrefix(artifactName, depsetFileNamePrefix) {
48+
depsetArtifacts = append(depsetArtifacts, artifactName)
49+
}
4750
}
4851

49-
return json.RawMessage(buffer.Bytes()), nil
52+
depsets := make([]descriptors.DepSet, 0)
53+
for _, artifactName := range depsetArtifacts {
54+
a, err := fs.GetArtifact(ctx, artifactName)
55+
if err != nil {
56+
return nil, fmt.Errorf("failed to get artifact: %w", err)
57+
}
58+
59+
buffer := &bytes.Buffer{}
60+
if err := a.ExtractFiles(ktfs.NewArtifactFileWriter(artifactName, buffer)); err != nil {
61+
return nil, fmt.Errorf("failed to extract dependency set: %w", err)
62+
}
63+
64+
depsets = append(depsets, descriptors.DepSet(buffer.Bytes()))
65+
}
66+
67+
return depsets, nil
5068
}

kurtosis-devnet/pkg/kurtosis/sources/interfaces/interfaces.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ package interfaces
22

33
import (
44
"context"
5-
"encoding/json"
65
"io"
76

7+
"github.com/ethereum-optimism/optimism/devnet-sdk/descriptors"
88
"github.com/ethereum-optimism/optimism/kurtosis-devnet/pkg/kurtosis/sources/deployer"
99
"github.com/ethereum-optimism/optimism/kurtosis-devnet/pkg/kurtosis/sources/inspect"
1010
"github.com/ethereum-optimism/optimism/kurtosis-devnet/pkg/kurtosis/sources/jwt"
@@ -28,5 +28,5 @@ type JWTExtractor interface {
2828
}
2929

3030
type DepsetExtractor interface {
31-
ExtractData(context.Context, string) (json.RawMessage, error)
31+
ExtractData(context.Context, string) ([]descriptors.DepSet, error)
3232
}

0 commit comments

Comments
 (0)