Skip to content

Commit

Permalink
update eigensdk validations (#95)
Browse files Browse the repository at this point in the history
* update eigensdk and validate

* update eigensdk and validate
  • Loading branch information
shrimalmadhur committed Apr 6, 2024
1 parent 88a0369 commit f856877
Show file tree
Hide file tree
Showing 7 changed files with 118 additions and 5 deletions.
2 changes: 1 addition & 1 deletion cmd/eigenlayer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func main() {

app.Name = "eigenlayer"
app.Usage = "EigenLayer CLI"
app.Version = "0.6.3"
app.Version = "0.7.0"
app.Copyright = "(c) 2024 EigenLabs"

// Initialize the dependencies
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ go 1.21

require (
github.com/AlecAivazis/survey/v2 v2.3.7
github.com/Layr-Labs/eigensdk-go v0.1.3-holesky-init-deployment
github.com/Layr-Labs/eigensdk-go v0.1.4-0.20240405211625-8a09b7da494c
github.com/ethereum/go-ethereum v1.13.14
github.com/stretchr/testify v1.9.0
github.com/urfave/cli/v2 v2.27.1
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ 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/eigensdk-go v0.1.3-holesky-init-deployment h1:GxIR6nBV+lCgBfS/Bu6NPFg5hqf2jUnXUDHznWyh9Ro=
github.com/Layr-Labs/eigensdk-go v0.1.3-holesky-init-deployment/go.mod h1:J+d9zxN4VyMtchmsPzGASFcCjpnh1eT4aE2ggiqOz/g=
github.com/Layr-Labs/eigensdk-go v0.1.4-0.20240405211625-8a09b7da494c h1:/qz1esvSLDKiVbk3L9BfWERoFJgdrcxoBRbMeDZinOE=
github.com/Layr-Labs/eigensdk-go v0.1.4-0.20240405211625-8a09b7da494c/go.mod h1:HOSNuZcwaKbP4cnNk9c1hK2B2RitcMQ36Xj2msBBBpE=
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
Expand Down
1 change: 1 addition & 0 deletions pkg/operator/error.go → pkg/operator/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ import "errors"
var (
ErrInvalidNumberOfArgs = errors.New("invalid number of arguments")
ErrInvalidYamlFile = errors.New("invalid yaml file")
ErrInvalidMetadata = errors.New("invalid metadata")
)
41 changes: 39 additions & 2 deletions pkg/operator/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ package operator

import (
"context"
"encoding/json"
"fmt"
wallet "github.com/Layr-Labs/eigensdk-go/chainio/clients/wallet"
"math/big"
"os"

eigensdkTypes "github.com/Layr-Labs/eigensdk-go/types"
eigenSdkUtils "github.com/Layr-Labs/eigensdk-go/utils"

"gopkg.in/yaml.v2"

"github.com/Layr-Labs/eigensdk-go/chainio/txmgr"
Expand All @@ -15,8 +18,10 @@ import (

"github.com/Layr-Labs/eigenlayer-cli/pkg/types"
"github.com/Layr-Labs/eigenlayer-cli/pkg/utils"

elContracts "github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts"
"github.com/Layr-Labs/eigensdk-go/chainio/clients/eth"
"github.com/Layr-Labs/eigensdk-go/chainio/clients/wallet"
eigensdkLogger "github.com/Layr-Labs/eigensdk-go/logging"
"github.com/Layr-Labs/eigensdk-go/metrics"
"github.com/ethereum/go-ethereum/common"
Expand Down Expand Up @@ -54,7 +59,12 @@ func RegisterCmd(p utils.Prompter) *cli.Command {

err = operatorCfg.Operator.Validate()
if err != nil {
return fmt.Errorf("%w: with error %s", ErrInvalidYamlFile, err)
return fmt.Errorf("%w: with error %s", ErrInvalidYamlFile, err.Error())
}

err = validateMetadata(operatorCfg)
if err != nil {
return err
}

if operatorCfg.ELDelegationManagerAddress == "" {
Expand Down Expand Up @@ -232,3 +242,30 @@ func getTransactionLink(txHash string, chainId *big.Int) string {
return fmt.Sprintf("%s/%s", chainMetadata.BlockExplorerUrl, txHash)
}
}

func validateMetadata(operatorCfg *types.OperatorConfigNew) error {
// Raw GitHub URL validation is only for mainnet
if operatorCfg.ChainId.Cmp(big.NewInt(utils.MainnetChainId)) == 0 {
err := eigenSdkUtils.ValidateRawGithubUrl(operatorCfg.Operator.MetadataUrl)
if err != nil {
return fmt.Errorf("%w: with error %s", ErrInvalidMetadata, err.Error())
}

metadataBytes, err := eigenSdkUtils.ReadPublicURL(operatorCfg.Operator.MetadataUrl)
if err != nil {
return err
}

var metadata *eigensdkTypes.OperatorMetadata
err = json.Unmarshal(metadataBytes, &metadata)
if err != nil {
return fmt.Errorf("%w: unable to parse metadata with error %s", ErrInvalidMetadata, err.Error())
}

err = eigenSdkUtils.ValidateRawGithubUrl(metadata.Logo)
if err != nil {
return fmt.Errorf("%w: logo url should be valid github raw url, error %s", ErrInvalidMetadata, err.Error())
}
}
return nil
}
63 changes: 63 additions & 0 deletions pkg/operator/register_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ import (
"math/big"
"testing"

"github.com/Layr-Labs/eigenlayer-cli/pkg/types"
"github.com/Layr-Labs/eigenlayer-cli/pkg/utils"
eigensdkTypes "github.com/Layr-Labs/eigensdk-go/types"

"github.com/stretchr/testify/assert"
)

Expand Down Expand Up @@ -48,3 +52,62 @@ func TestGetTransactionLink(t *testing.T) {
})
}
}

func TestValidateMainnetMetadata(t *testing.T) {
var tests = []struct {
name string
operatorCfg *types.OperatorConfigNew
expectErr bool
}{
{
name: "Valid metadata",
operatorCfg: &types.OperatorConfigNew{
Operator: eigensdkTypes.Operator{
MetadataUrl: "https://raw.githubusercontent.com/Layr-Labs/eigendata/master/operators/eigenlabs/metadata.json",
},
ChainId: *big.NewInt(utils.MainnetChainId),
},
},
{
name: "Invalid metadata - invalid logo url",
operatorCfg: &types.OperatorConfigNew{
Operator: eigensdkTypes.Operator{
MetadataUrl: "https://raw.githubusercontent.com/shrimalmadhur/metadata/main/metadata1.json",
},
ChainId: *big.NewInt(utils.MainnetChainId),
},
expectErr: true,
},
{
name: "Invalid metadata - Invalid metadata url",
operatorCfg: &types.OperatorConfigNew{
Operator: eigensdkTypes.Operator{
MetadataUrl: "https://goerli-operator-metadata.s3.amazonaws.com/metadata.json",
},
ChainId: *big.NewInt(utils.MainnetChainId),
},
expectErr: true,
},
{
name: "Valid metadata for holesky",
operatorCfg: &types.OperatorConfigNew{
Operator: eigensdkTypes.Operator{
MetadataUrl: "https://goerli-operator-metadata.s3.amazonaws.com/metadata.json",
},
ChainId: *big.NewInt(utils.HoleskyChainId),
},
expectErr: false,
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := validateMetadata(tt.operatorCfg)
if tt.expectErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})
}
}
12 changes: 11 additions & 1 deletion pkg/operator/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package operator
import (
"context"
"fmt"
"github.com/Layr-Labs/eigensdk-go/chainio/clients/wallet"

"github.com/Layr-Labs/eigensdk-go/chainio/clients/wallet"
"github.com/Layr-Labs/eigensdk-go/chainio/txmgr"
"github.com/Layr-Labs/eigensdk-go/signerv2"

Expand Down Expand Up @@ -48,6 +48,16 @@ func UpdateCmd(p utils.Prompter) *cli.Command {
operatorCfg.Operator.Address,
)

err = operatorCfg.Operator.Validate()
if err != nil {
return fmt.Errorf("%w: with error %s", ErrInvalidYamlFile, err)
}

err = validateMetadata(operatorCfg)
if err != nil {
return err
}

logger, err := eigensdkLogger.NewZapLogger(eigensdkLogger.Development)
if err != nil {
return err
Expand Down

0 comments on commit f856877

Please sign in to comment.