Skip to content

fix: use correct version of eigenlayer-contracts and multichain-go to unbreak result submission #215

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

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
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
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ toolchain go1.24.2
replace github.com/Layr-Labs/devkit-cli => ./

require (
github.com/Layr-Labs/eigenlayer-contracts v1.6.0-rc.0.0.20250623205506-624a68bf25de
github.com/Layr-Labs/eigenlayer-contracts v1.6.0-rc.0.0.20250616202559-70e3fc0e60c8
github.com/Layr-Labs/hourglass-monorepo/ponos v0.0.0-20250613205316-cb10040f5737
github.com/Layr-Labs/multichain-go v0.0.4
github.com/Layr-Labs/multichain-go v0.0.3
github.com/google/uuid v1.6.0
github.com/joho/godotenv v1.5.1
github.com/posthog/posthog-go v1.4.10
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ=
github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
github.com/Layr-Labs/crypto-libs v0.0.3 h1:n5jcvmaBLcjhxL7hcnL8ar0MiycPl6s3OMsuUCn2OEg=
github.com/Layr-Labs/crypto-libs v0.0.3/go.mod h1:PWjHsuxgk5MNopPr3QLhpP/RJerbjh98qCCSivnVPHE=
github.com/Layr-Labs/eigenlayer-contracts v1.6.0-rc.0.0.20250623205506-624a68bf25de h1:1Rr/6/km2qYiaicAuy6YRZWag7fOQPeecNTag92Zk0w=
github.com/Layr-Labs/eigenlayer-contracts v1.6.0-rc.0.0.20250623205506-624a68bf25de/go.mod h1:Ie8YE3EQkTHqG6/tnUS0He7/UPMkXPo/3OFXwSy0iRo=
github.com/Layr-Labs/eigenlayer-contracts v1.6.0-rc.0.0.20250616202559-70e3fc0e60c8 h1:JRm4HJLkuMa1Z7CKCEhPJWTyOTeQ+Ydm31+fQUDdCb8=
github.com/Layr-Labs/eigenlayer-contracts v1.6.0-rc.0.0.20250616202559-70e3fc0e60c8/go.mod h1:Ie8YE3EQkTHqG6/tnUS0He7/UPMkXPo/3OFXwSy0iRo=
github.com/Layr-Labs/hourglass-monorepo/ponos v0.0.0-20250613205316-cb10040f5737 h1:UnBl34Y3xxQ4WTQ/O36dtY0CtHXZXvgyWxwEdJRCdHQ=
github.com/Layr-Labs/hourglass-monorepo/ponos v0.0.0-20250613205316-cb10040f5737/go.mod h1:bNDHU6OHvYrjPaUe/0GSUrfvO6OjGFWIWPehC0U6K40=
github.com/Layr-Labs/multichain-go v0.0.4 h1:cIslyQfl3VWosiLs5V5vnbCnvWP+AqQbjEATlvz4PB8=
github.com/Layr-Labs/multichain-go v0.0.4/go.mod h1:zEuGJvTEl1jorkvy0JEczktUGPZvWM2SAkXzTW5hXQc=
github.com/Layr-Labs/multichain-go v0.0.3 h1:tdHYjb+bylZsyzSAe+lXtNheA8/BNsFWgCEOIXSaW9k=
github.com/Layr-Labs/multichain-go v0.0.3/go.mod h1:fZk8zOuLPfC0mGL4zF729dNjz8QfehYg5MxDqF9OnBo=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI=
Expand Down
104 changes: 53 additions & 51 deletions pkg/commands/release.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package commands

import (
"context"
// "context"
"encoding/hex"
"encoding/json"
"fmt"
"math/big"
// "math/big"
"os"
"os/exec"
"path/filepath"
Expand All @@ -16,9 +16,9 @@
"github.com/Layr-Labs/devkit-cli/pkg/common"
"github.com/Layr-Labs/devkit-cli/pkg/common/devnet"
"github.com/Layr-Labs/devkit-cli/pkg/common/iface"
releasemanager "github.com/Layr-Labs/eigenlayer-contracts/pkg/bindings/ReleaseManager"
ethcommon "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
// releasemanager "github.com/Layr-Labs/eigenlayer-contracts/pkg/bindings/ReleaseManager"
// ethcommon "github.com/ethereum/go-ethereum/common"
// "github.com/ethereum/go-ethereum/ethclient"
"github.com/urfave/cli/v2"
"gopkg.in/yaml.v3"
)
Expand Down Expand Up @@ -48,7 +48,7 @@
}

// updateContextWithDigest updates the context YAML file with the digest after successful release
func updateContextWithDigest(digest string) error {

Check failure on line 51 in pkg/commands/release.go

View workflow job for this annotation

GitHub Actions / Lint

func `updateContextWithDigest` is unused (unused)
// Load the context yaml file
contextPath := filepath.Join("config", "contexts", "devnet.yaml") // TODO: make context configurable
contextNode, err := common.LoadYAML(contextPath)
Expand Down Expand Up @@ -140,63 +140,64 @@

// processOperatorSets processes each operator set and publishes releases on chain
func processOperatorSetsAndPublishReleaseOnChain(cCtx *cli.Context, logger iface.Logger, operatorSetMapping map[string][]OperatorSetRelease, avs string, upgradeByTime int64, registry string) error {
// Publish releases for each operator set
for opSetId, opSetDataArray := range operatorSetMapping {
opSetIdInt, err := strconv.ParseUint(opSetId, 10, 32)
if err != nil {
logger.Warn("Failed to parse operator set ID %s: %v", opSetId, err)
continue
}

logger.Info("Processing operator set %s with %d artifacts:", opSetId, len(opSetDataArray))
/*
// Publish releases for each operator set
for opSetId, opSetDataArray := range operatorSetMapping {
opSetIdInt, err := strconv.ParseUint(opSetId, 10, 32)
if err != nil {
logger.Warn("Failed to parse operator set ID %s: %v", opSetId, err)
continue
}

// Create artifacts array for this operator set
var artifacts []releasemanager.IReleaseManagerTypesArtifact
for i, opSetData := range opSetDataArray {
logger.Info("Artifact %d:", i+1)
logger.Info("Digest: %s", opSetData.Digest)
logger.Info("Registry: %s", opSetData.Registry)
logger.Info("Processing operator set %s with %d artifacts:", opSetId, len(opSetDataArray))

// Create artifacts array for this operator set
var artifacts []releasemanager.IReleaseManagerTypesArtifact
for i, opSetData := range opSetDataArray {
logger.Info("Artifact %d:", i+1)
logger.Info("Digest: %s", opSetData.Digest)
logger.Info("Registry: %s", opSetData.Registry)

// this means this is the component
if opSetData.Registry == registry {
err := updateContextWithDigest(opSetData.Digest)
if err != nil {
logger.Warn("Failed to update context with digest for operator set %s artifact %d: %v", opSetId, i+1, err)
continue
}
logger.Info("Successfully updated context with digest for operator set %s artifact %d", opSetId, i+1)
}

// this means this is the component
if opSetData.Registry == registry {
err := updateContextWithDigest(opSetData.Digest)
// Convert digest to bytes32
digestBytes, err := hexStringToBytes32(opSetData.Digest)
if err != nil {
logger.Warn("Failed to update context with digest for operator set %s artifact %d: %v", opSetId, i+1, err)
logger.Warn("Failed to convert digest to bytes32 for operator set %s artifact %d: %v", opSetId, i+1, err)
continue
}
logger.Info("Successfully updated context with digest for operator set %s artifact %d", opSetId, i+1)
}

// Convert digest to bytes32
digestBytes, err := hexStringToBytes32(opSetData.Digest)
if err != nil {
logger.Warn("Failed to convert digest to bytes32 for operator set %s artifact %d: %v", opSetId, i+1, err)
continue
artifact := releasemanager.IReleaseManagerTypesArtifact{
Digest: digestBytes,
RegistryUrl: opSetData.Registry,
}
artifacts = append(artifacts, artifact)
}

artifact := releasemanager.IReleaseManagerTypesArtifact{
Digest: digestBytes,
RegistryUrl: opSetData.Registry,
if len(artifacts) == 0 {
logger.Warn("No valid artifacts for operator set %s, skipping", opSetId)
continue
}
artifacts = append(artifacts, artifact)
}

if len(artifacts) == 0 {
logger.Warn("No valid artifacts for operator set %s, skipping", opSetId)
continue
}

logger.Info("Publishing release for operator set %s with %d artifacts...", opSetId, len(artifacts))
if err := publishReleaseToReleaseManagerAction(cCtx.Context, logger, avs, uint32(opSetIdInt), upgradeByTime, artifacts); err != nil {
if strings.Contains(err.Error(), "connection refused") {
logger.Warn("Failed to publish release for operator set %s: %v", opSetId, err)
logger.Info("Check if devnet is running and try again")
return err
logger.Info("Publishing release for operator set %s with %d artifacts...", opSetId, len(artifacts))
if err := publishReleaseToReleaseManagerAction(cCtx.Context, logger, avs, uint32(opSetIdInt), upgradeByTime, artifacts); err != nil {
if strings.Contains(err.Error(), "connection refused") {
logger.Warn("Failed to publish release for operator set %s: %v", opSetId, err)
logger.Info("Check if devnet is running and try again")
return err
}
}
logger.Info("Successfully published release for operator set %s", opSetId)
}
logger.Info("Successfully published release for operator set %s", opSetId)
}

*/
return nil
}

Expand Down Expand Up @@ -317,6 +318,7 @@
return strconv.Itoa(versionInt), nil
}

/*
func publishReleaseToReleaseManagerAction(ctx context.Context, logger iface.Logger, avs string, operatorSetId uint32, upgradeByTime int64, artifacts []releasemanager.IReleaseManagerTypesArtifact) error {

cfg, err := common.LoadConfigWithContextConfig(devnet.DEVNET_CONTEXT)
Expand Down Expand Up @@ -374,10 +376,10 @@

logger.Info("Successfully published release to ReleaseManager contract")
return nil
}
}*/

// hexStringToBytes32 converts a hex string (like "sha256:abc123...") to [32]byte
func hexStringToBytes32(hexStr string) ([32]byte, error) {

Check failure on line 382 in pkg/commands/release.go

View workflow job for this annotation

GitHub Actions / Lint

func `hexStringToBytes32` is unused (unused)
var result [32]byte

// Remove "sha256:" prefix if present
Expand Down
2 changes: 1 addition & 1 deletion pkg/commands/transporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ func Transport(cCtx *cli.Context) error {
return fmt.Errorf("Failed to create StakeTableRootCalculator: %v", err)
}

block, err := holeskyClient.RPCClient.BlockByNumber(cCtx.Context, big.NewInt(int64(rpc.FinalizedBlockNumber)))
block, err := holeskyClient.RPCClient.BlockByNumber(cCtx.Context, big.NewInt(int64(rpc.LatestBlockNumber)))
if err != nil {
return fmt.Errorf("Failed to get block by number: %v", err)
}
Expand Down
57 changes: 30 additions & 27 deletions pkg/common/contract_caller.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (
crosschainregistry "github.com/Layr-Labs/eigenlayer-contracts/pkg/bindings/CrossChainRegistry"
"github.com/Layr-Labs/eigenlayer-contracts/pkg/bindings/DelegationManager"
keyregistrar "github.com/Layr-Labs/eigenlayer-contracts/pkg/bindings/KeyRegistrar"
releasemanager "github.com/Layr-Labs/eigenlayer-contracts/pkg/bindings/ReleaseManager"
// releasemanager "github.com/Layr-Labs/eigenlayer-contracts/pkg/bindings/ReleaseManager"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
Expand Down Expand Up @@ -738,33 +738,36 @@ func (cc *ContractCaller) GetRegistry() *contracts.ContractRegistry {
return cc.registry
}

/*
func (cc *ContractCaller) PublishRelease(ctx context.Context, avsAddress common.Address, artifacts []releasemanager.IReleaseManagerTypesArtifact, operatorSetId uint32, upgradeByTime int64) error {
opts, err := cc.buildTxOpts()
if err != nil {
return fmt.Errorf("failed to build transaction options: %w", err)
}
releaseManager, err := cc.registry.GetReleaseManager(cc.releaseManagerAddr)
if err != nil {
return fmt.Errorf("failed to get ReleaseManager: %w", err)
}
operatorSet := releasemanager.OperatorSet{Avs: avsAddress, Id: operatorSetId}
release := releasemanager.IReleaseManagerTypesRelease{
Artifacts: artifacts,
UpgradeByTime: uint32(upgradeByTime),
}
return cc.SendAndWaitForTransaction(ctx, "PublishRelease", func() (*types.Transaction, error) {
tx, err := releaseManager.PublishRelease(opts, operatorSet, release)
if err == nil && tx != nil {
cc.logger.Debug(
"Transaction hash for PublishRelease: %s\n"+
"operatorSet: %s\n"+
"release: %s",
tx.Hash().Hex(),
operatorSet,
release,
)
return nil
opts, err := cc.buildTxOpts()
if err != nil {
return fmt.Errorf("failed to build transaction options: %w", err)
}
return tx, err
})
releaseManager, err := cc.registry.GetReleaseManager(cc.releaseManagerAddr)
if err != nil {
return fmt.Errorf("failed to get ReleaseManager: %w", err)
}
operatorSet := releasemanager.OperatorSet{Avs: avsAddress, Id: operatorSetId}
release := releasemanager.IReleaseManagerTypesRelease{
Artifacts: artifacts,
UpgradeByTime: uint32(upgradeByTime),
}
return cc.SendAndWaitForTransaction(ctx, "PublishRelease", func() (*types.Transaction, error) {
tx, err := releaseManager.PublishRelease(opts, operatorSet, release)
if err == nil && tx != nil {
cc.logger.Debug(
"Transaction hash for PublishRelease: %s\n"+
"operatorSet: %s\n"+
"release: %s",
tx.Hash().Hex(),
operatorSet,
release,
)
}
return tx, err
})

}
*/
29 changes: 16 additions & 13 deletions pkg/common/contracts/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
delegationmanager "github.com/Layr-Labs/eigenlayer-contracts/pkg/bindings/DelegationManager"
istrategy "github.com/Layr-Labs/eigenlayer-contracts/pkg/bindings/IStrategy"
keyregistrar "github.com/Layr-Labs/eigenlayer-contracts/pkg/bindings/KeyRegistrar"
releasemanager "github.com/Layr-Labs/eigenlayer-contracts/pkg/bindings/ReleaseManager"
// releasemanager "github.com/Layr-Labs/eigenlayer-contracts/pkg/bindings/ReleaseManager"
strategymanager "github.com/Layr-Labs/eigenlayer-contracts/pkg/bindings/StrategyManager"
)

Expand Down Expand Up @@ -201,6 +201,7 @@
return erc20, nil
}

/*
// GetReleaseManager returns a ReleaseManager instance
func (cr *ContractRegistry) GetReleaseManager(address common.Address) (*releasemanager.ReleaseManager, error) {
instance, err := cr.GetContract(ReleaseManagerContract, address)
Expand All @@ -212,7 +213,7 @@
return nil, fmt.Errorf("contract at %s is not a ReleaseManager", address.Hex())
}
return releaseManager, nil
}
}*/

// ListContracts returns all registered contracts of a specific type
func (cr *ContractRegistry) ListContracts(contractType ContractType) []ContractInfo {
Expand Down Expand Up @@ -244,8 +245,8 @@
return keyregistrar.NewKeyRegistrar(info.Address, cr.client)
case CrossChainRegistryContract:
return crosschainregistry.NewCrossChainRegistry(info.Address, cr.client)
case ReleaseManagerContract:
return releasemanager.NewReleaseManager(info.Address, cr.client)
// case ReleaseManagerContract:
// return releasemanager.NewReleaseManager(info.Address, cr.client)
default:
return nil, fmt.Errorf("unsupported contract type: %s", info.Type)
}
Expand Down Expand Up @@ -319,15 +320,16 @@
if err != nil {
return nil, err
}
err = rb.registry.RegisterContract(ContractInfo{
Name: "ReleaseManager",
Type: ReleaseManagerContract,
Address: releaseManagerAddr,
Description: "EigenLayer ReleaseManager contract",
})
if err != nil {
return nil, err
}
/*
err = rb.registry.RegisterContract(ContractInfo{
Name: "ReleaseManager",
Type: ReleaseManagerContract,
Address: releaseManagerAddr,
Description: "EigenLayer ReleaseManager contract",
})
if err != nil {
return nil, err
}*/
return rb, nil
}

Expand Down Expand Up @@ -360,7 +362,8 @@
}

func (rb *RegistryBuilder) AddReleaseManager(address common.Address) (*RegistryBuilder, error) {
return nil, nil
err := rb.registry.RegisterContract(ContractInfo{

Check failure on line 366 in pkg/common/contracts/registry.go

View workflow job for this annotation

GitHub Actions / Lint

unreachable: unreachable code (govet)
Name: "ReleaseManager",
Type: ReleaseManagerContract,
Address: address,
Expand Down
Loading