Skip to content

fix(kt-devnet): adjust to possible multiple depsets #15515

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions devnet-sdk/descriptors/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ type Wallet struct {
// WalletMap is a map of wallet names to wallets.
type WalletMap map[string]*Wallet

type DepSet = json.RawMessage

// DevnetEnvironment exposes the relevant information to interact with a devnet.
type DevnetEnvironment struct {
Name string `json:"name"`
Expand All @@ -73,6 +75,6 @@ type DevnetEnvironment struct {
L1 *Chain `json:"l1"`
L2 []*L2Chain `json:"l2"`

Features []string `json:"features,omitempty"`
DepSet json.RawMessage `json:"dep_set,omitempty"`
Features []string `json:"features,omitempty"`
DepSets []DepSet `json:"dep_sets,omitempty"`
}
18 changes: 11 additions & 7 deletions devnet-sdk/devstack/sysext/system.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,18 @@ func (o *Orchestrator) hydrateClusterMaybe(sys stack.ExtensibleSystem) {
require := sys.T().Require()
env := o.env

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

sys.AddCluster(shim.NewCluster(shim.ClusterConfig{
CommonConfig: shim.NewCommonConfig(sys.T()),
ID: stack.ClusterID(env.Env.Name),
DependencySet: &depSet,
}))
for _, d := range depsets {
var depSet depset.StaticConfigDependencySet
require.NoError(json.Unmarshal(d, &depSet))

sys.AddCluster(shim.NewCluster(shim.ClusterConfig{
CommonConfig: shim.NewCommonConfig(sys.T()),
ID: stack.ClusterID(env.Env.Name),
DependencySet: &depSet,
}))
}
}

func (o *Orchestrator) hydrateSupervisorMaybe(sys stack.ExtensibleSystem) {
Expand Down
20 changes: 3 additions & 17 deletions kurtosis-devnet/interop.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,25 +18,11 @@
optimism_package:
interop:
enabled: true
sets:
- name: "interop-set"
participants: "*"
supervisor_params:
image: {{ $local_images.op_supervisor }}
dependency_set: |
{
"dependencies": {
"2151908": {
"chainIndex": "2151908",
"activationTime": 0,
"historyMinTime": 0
},
"2151909": {
"chainIndex": "2151909",
"activationTime": 0,
"historyMinTime": 0
}
}
}
extra_params:
- {{ $flags.log_level }}
chains:
- participants:
- el_type: op-geth
Expand Down
2 changes: 1 addition & 1 deletion kurtosis-devnet/optimism-package-trampoline/kurtosis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: github.com/ethereum-optimism/optimism/kurtosis-devnet/optimism-package-tra
description: |-
A trampoline package for optimism-package. This one is reproducible, due to the replace directives below.
replace:
github.com/ethpandaops/optimism-package: github.com/ethpandaops/optimism-package@1cf76907eaa437ee9fcf902167714fece027962a
github.com/ethpandaops/optimism-package: github.com/ethpandaops/optimism-package@07fcbfb17fdf00f048242c938471849bba128bf0
github.com/ethpandaops/ethereum-package: github.com/ethpandaops/ethereum-package@83830d44823767af65eda7dfe6b26c87c536c4cf
github.com/kurtosis-tech/prometheus-package: github.com/kurtosis-tech/prometheus-package@f5ce159aec728898e3deb827f6b921f8ecfc527f
github.com/kurtosis-tech/postgres-package: github.com/kurtosis-tech/postgres-package@2d363be1bc42524f6b0575cac0bbc0fd194ae173
4 changes: 2 additions & 2 deletions kurtosis-devnet/pkg/kurtosis/adapters.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package kurtosis

import (
"context"
"encoding/json"
"io"

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

type enclaveDepsetAdapter struct{}

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

Expand Down
7 changes: 3 additions & 4 deletions kurtosis-devnet/pkg/kurtosis/kurtosis.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package kurtosis
import (
"bytes"
"context"
"encoding/json"
"fmt"
"io"

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

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

L2: make([]*descriptors.L2Chain, 0, len(s.Chains)),
Features: s.Features,
DepSet: depsetData,
DepSets: depsets,
},
}

Expand Down
17 changes: 8 additions & 9 deletions kurtosis-devnet/pkg/kurtosis/kurtosis_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package kurtosis

import (
"context"
"encoding/json"
"fmt"
"io"
"strings"
Expand Down Expand Up @@ -119,11 +118,11 @@ func (f *fakeJWTExtractor) ExtractData(ctx context.Context, enclave string) (*jw
}

type fakeDepsetExtractor struct {
data json.RawMessage
data []descriptors.DepSet
err error
}

func (f *fakeDepsetExtractor) ExtractData(ctx context.Context, enclave string) (json.RawMessage, error) {
func (f *fakeDepsetExtractor) ExtractData(ctx context.Context, enclave string) ([]descriptors.DepSet, error) {
return f.data, f.err
}

Expand Down Expand Up @@ -346,7 +345,7 @@ func TestGetEnvironmentInfo(t *testing.T) {
},
},
},
DepSet: nil,
DepSets: nil,
},
},
},
Expand Down Expand Up @@ -428,7 +427,7 @@ func TestGetEnvironmentInfo(t *testing.T) {
},
},
Features: spec.FeatureList{spec.FeatureInterop},
DepSet: json.RawMessage(`{}`),
DepSets: []descriptors.DepSet{descriptors.DepSet(`{}`)},
},
},
},
Expand Down Expand Up @@ -489,7 +488,7 @@ func TestGetEnvironmentInfo(t *testing.T) {
},
},
Features: spec.FeatureList{},
DepSet: nil,
DepSets: nil,
},
},
},
Expand All @@ -503,9 +502,9 @@ func TestGetEnvironmentInfo(t *testing.T) {
}

// Create depset data based on whether interop is enabled
var depsetData json.RawMessage
var depsets []descriptors.DepSet
if tt.spec != nil && tt.spec.Features.Contains(spec.FeatureInterop) {
depsetData = json.RawMessage(`{}`)
depsets = []descriptors.DepSet{descriptors.DepSet(`{}`)}
}

deployer, err := NewKurtosisDeployer(
Expand All @@ -523,7 +522,7 @@ func TestGetEnvironmentInfo(t *testing.T) {
err: tt.err,
}),
WithKurtosisDepsetExtractor(&fakeDepsetExtractor{
data: depsetData,
data: depsets,
err: tt.err,
}),
)
Expand Down
40 changes: 29 additions & 11 deletions kurtosis-devnet/pkg/kurtosis/sources/depset/depset.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@ package depset
import (
"bytes"
"context"
"encoding/json"
"fmt"
"strings"

"github.com/ethereum-optimism/optimism/devnet-sdk/descriptors"
ktfs "github.com/ethereum-optimism/optimism/devnet-sdk/kt/fs"
)

const (
depsetFileName = "dependency_set.json"
depsetFileNamePrefix = "dependency_set"
)

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

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

return extractDepsetFromArtifact(ctx, fs, depsetFileName)
return extractDepsetsFromArtifacts(ctx, fs)
}

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

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

return json.RawMessage(buffer.Bytes()), nil
depsets := make([]descriptors.DepSet, 0)
for _, artifactName := range depsetArtifacts {
a, err := fs.GetArtifact(ctx, artifactName)
if err != nil {
return nil, fmt.Errorf("failed to get artifact: %w", err)
}

buffer := &bytes.Buffer{}
if err := a.ExtractFiles(ktfs.NewArtifactFileWriter(artifactName, buffer)); err != nil {
return nil, fmt.Errorf("failed to extract dependency set: %w", err)
}

depsets = append(depsets, descriptors.DepSet(buffer.Bytes()))
}

return depsets, nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package interfaces

import (
"context"
"encoding/json"
"io"

"github.com/ethereum-optimism/optimism/devnet-sdk/descriptors"
"github.com/ethereum-optimism/optimism/kurtosis-devnet/pkg/kurtosis/sources/deployer"
"github.com/ethereum-optimism/optimism/kurtosis-devnet/pkg/kurtosis/sources/inspect"
"github.com/ethereum-optimism/optimism/kurtosis-devnet/pkg/kurtosis/sources/jwt"
Expand All @@ -28,5 +28,5 @@ type JWTExtractor interface {
}

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