Skip to content

Commit

Permalink
m2 mainnet contracts
Browse files Browse the repository at this point in the history
  • Loading branch information
shrimalmadhur committed Jan 29, 2024
1 parent 72a32cf commit 607c07b
Show file tree
Hide file tree
Showing 9 changed files with 201 additions and 152 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ bin
# Config files
metadata.json
operator-config.yaml
operator-config.yaml.old
operator.yaml
operator.yaml.old
config/*

# build
Expand Down
37 changes: 18 additions & 19 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,21 @@ go 1.21

require (
github.com/AlecAivazis/survey/v2 v2.3.7
github.com/Layr-Labs/eigensdk-go v0.0.9
github.com/ethereum/go-ethereum v1.13.5
github.com/Layr-Labs/eigensdk-go v0.0.10-0.20240121052628-2db70d4dfb61
github.com/ethereum/go-ethereum v1.13.8
github.com/stretchr/testify v1.8.4
github.com/urfave/cli/v2 v2.27.1
github.com/wagslane/go-password-validator v0.3.0
go.uber.org/mock v0.3.0
gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v3 v3.0.1
)

require (
github.com/Microsoft/go-winio v0.6.1 // indirect
github.com/StackExchange/wmi v1.2.1 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bits-and-blooms/bitset v1.7.0 // indirect
github.com/bits-and-blooms/bitset v1.10.0 // indirect
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/consensys/bavard v0.1.13 // indirect
Expand All @@ -30,22 +31,20 @@ require (
github.com/ethereum/c-kzg-4844 v0.4.0 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-stack/stack v1.8.1 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/uuid v1.5.0 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
github.com/holiman/uint256 v1.2.3 // indirect
github.com/holiman/uint256 v1.2.4 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.18 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
github.com/mmcloughlin/addchain v0.4.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_golang v1.17.0 // indirect
github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect
github.com/prometheus/common v0.44.0 // indirect
github.com/prometheus/procfs v0.11.1 // indirect
github.com/prometheus/client_golang v1.18.0 // indirect
github.com/prometheus/client_model v0.5.0 // indirect
github.com/prometheus/common v0.45.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect
github.com/supranational/blst v0.3.11 // indirect
Expand All @@ -54,14 +53,14 @@ require (
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.26.0 // indirect
golang.org/x/crypto v0.14.0 // indirect
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
golang.org/x/mod v0.12.0 // indirect
golang.org/x/sync v0.3.0 // indirect
golang.org/x/sys v0.13.0 // indirect
golang.org/x/term v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
golang.org/x/tools v0.13.0 // indirect
golang.org/x/crypto v0.17.0 // indirect
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect
golang.org/x/mod v0.14.0 // indirect
golang.org/x/sync v0.5.0 // indirect
golang.org/x/sys v0.15.0 // indirect
golang.org/x/term v0.15.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.15.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
rsc.io/tmplfunc v0.0.3 // indirect
)
81 changes: 40 additions & 41 deletions go.sum

Large diffs are not rendered by default.

16 changes: 8 additions & 8 deletions pkg/operator/config/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func CreateCmd(p utils.Prompter) *cli.Command {
Both of these are needed for operator registration
`,
Action: func(ctx *cli.Context) error {
op := types.OperatorConfig{}
op := types.OperatorConfigNew{}

// Prompt user to generate empty or non-empty files
populate, err := p.Confirm("Would you like to populate the operator config file?")
Expand Down Expand Up @@ -81,15 +81,15 @@ func CreateCmd(p utils.Prompter) *cli.Command {
return createCmd
}

func promptOperatorInfo(config *types.OperatorConfig, p utils.Prompter) (types.OperatorConfig, error) {
func promptOperatorInfo(config *types.OperatorConfigNew, p utils.Prompter) (types.OperatorConfigNew, error) {
// Prompt and set operator address
operatorAddress, err := p.InputString("Enter your operator address:", "", "",
func(s string) error {
return validateAddressIsNonZeroAndValid(s)
},
)
if err != nil {
return types.OperatorConfig{}, err
return types.OperatorConfigNew{}, err
}
config.Operator.Address = operatorAddress

Expand Down Expand Up @@ -134,7 +134,7 @@ func promptOperatorInfo(config *types.OperatorConfig, p utils.Prompter) (types.O
},
)
if err != nil {
return types.OperatorConfig{}, err
return types.OperatorConfigNew{}, err
}
config.Operator.EarningsReceiverAddress = earningsAddress

Expand All @@ -143,7 +143,7 @@ func promptOperatorInfo(config *types.OperatorConfig, p utils.Prompter) (types.O
func(s string) error { return nil },
)
if err != nil {
return types.OperatorConfig{}, err
return types.OperatorConfigNew{}, err
}
config.EthRPCUrl = rpcUrl

Expand All @@ -152,7 +152,7 @@ func promptOperatorInfo(config *types.OperatorConfig, p utils.Prompter) (types.O
func(s string) error { return nil },
)
if err != nil {
return types.OperatorConfig{}, err
return types.OperatorConfigNew{}, err
}
config.PrivateKeyStorePath = ecdsaKeyPath

Expand All @@ -161,14 +161,14 @@ func promptOperatorInfo(config *types.OperatorConfig, p utils.Prompter) (types.O
func(s string) error { return nil },
)
if err != nil {
return types.OperatorConfig{}, err
return types.OperatorConfigNew{}, err
}
config.BlsPrivateKeyStorePath = blsKeyPath

// Prompt for network & set chainId
chainId, err := p.Select("Select your network:", []string{"mainnet", "goerli", "holesky", "local"})
if err != nil {
return types.OperatorConfig{}, err
return types.OperatorConfigNew{}, err
}

switch chainId {
Expand Down
107 changes: 62 additions & 45 deletions pkg/operator/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import (
"context"
"fmt"
"math/big"
"os"

"gopkg.in/yaml.v2"

"github.com/Layr-Labs/eigensdk-go/chainio/txmgr"
"github.com/Layr-Labs/eigensdk-go/signerv2"
Expand All @@ -13,10 +16,8 @@ import (
"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/crypto/bls"
eigensdkLogger "github.com/Layr-Labs/eigensdk-go/logging"
"github.com/Layr-Labs/eigensdk-go/metrics"
eigensdkUtils "github.com/Layr-Labs/eigensdk-go/utils"
"github.com/ethereum/go-ethereum/common"
"github.com/urfave/cli/v2"
)
Expand All @@ -40,27 +41,26 @@ func RegisterCmd(p utils.Prompter) *cli.Command {
}

configurationFilePath := args.Get(0)
var operatorCfg types.OperatorConfig
err := eigensdkUtils.ReadYamlConfig(configurationFilePath, &operatorCfg)
operatorCfg, err := validateAndMigrateConfigFile(configurationFilePath)
if err != nil {
return err
}
fmt.Printf(
"Operator configuration file read successfully %s %s\n",
operatorCfg.Operator.Address,
"%s Operator configuration file read successfully %s\n",
utils.EmojiCheckMark,
operatorCfg.Operator.Address,
)
fmt.Printf("validating operator config: %s %s\n", operatorCfg.Operator.Address, utils.EmojiWait)
fmt.Printf("%s validating operator config: %s", utils.EmojiWait, operatorCfg.Operator.Address)

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

fmt.Printf(
"Operator configuration file validated successfully %s %s\n",
operatorCfg.Operator.Address,
"\r%s Operator configuration file validated successfully %s\n",
utils.EmojiCheckMark,
operatorCfg.Operator.Address,
)

ctx := context.Background()
Expand All @@ -69,21 +69,6 @@ func RegisterCmd(p utils.Prompter) *cli.Command {
return err
}

blsKeyPassword, err := p.InputHiddenString("Enter password to decrypt the bls private key:", "",
func(password string) error {
return nil
},
)
if err != nil {
fmt.Println("Error while reading bls key password")
return err
}

keyPair, err := bls.ReadPrivateKeyFromFile(operatorCfg.BlsPrivateKeyStorePath, blsKeyPassword)
if err != nil {
return err
}

ethClient, err := eth.NewClient(operatorCfg.EthRPCUrl)
if err != nil {
return err
Expand Down Expand Up @@ -112,8 +97,7 @@ func RegisterCmd(p utils.Prompter) *cli.Command {
noopMetrics := metrics.NewNoopMetrics()

elWriter, err := elContracts.BuildELChainWriter(
common.HexToAddress(operatorCfg.ELSlasherAddress),
common.HexToAddress(operatorCfg.BlsPublicKeyCompendiumAddress),
common.HexToAddress(operatorCfg.ELDelegationManager),
ethClient,
logger,
noopMetrics,
Expand All @@ -124,8 +108,7 @@ func RegisterCmd(p utils.Prompter) *cli.Command {
}

reader, err := elContracts.BuildELChainReader(
common.HexToAddress(operatorCfg.ELSlasherAddress),
common.HexToAddress(operatorCfg.BlsPublicKeyCompendiumAddress),
common.HexToAddress(operatorCfg.ELDelegationManager),
ethClient,
logger,
)
Expand All @@ -141,38 +124,72 @@ func RegisterCmd(p utils.Prompter) *cli.Command {
if !status {
receipt, err := elWriter.RegisterAsOperator(ctx, operatorCfg.Operator)
if err != nil {
logger.Infof("Error while registering operator %s", utils.EmojiCrossMark)
fmt.Printf("%s Error while registering operator", utils.EmojiCrossMark)
return err
}
logger.Infof(
"Operator registration transaction at: %s %s",
getTransactionLink(receipt.TxHash.String(), &operatorCfg.ChainId),
fmt.Printf(
"%s Operator registration transaction at: %s",
utils.EmojiCheckMark,
getTransactionLink(receipt.TxHash.String(), &operatorCfg.ChainId),
)

} else {
logger.Infof("Operator is already registered on EigenLayer %s\n", utils.EmojiCheckMark)
fmt.Printf("%s Operator is already registered on EigenLayer\n", utils.EmojiCheckMark)
return nil
}

receipt, err := elWriter.RegisterBLSPublicKey(ctx, keyPair, operatorCfg.Operator)
if err != nil {
logger.Infof("Error while registering BLS public key %s", utils.EmojiCrossMark)
return err
}
logger.Infof(
"Operator bls key added transaction at: %s %s",
getTransactionLink(receipt.TxHash.String(), &operatorCfg.ChainId),
utils.EmojiCheckMark,
)

logger.Infof("Operator is registered and bls key added successfully %s\n", utils.EmojiCheckMark)
fmt.Printf("%s Operator is registered successfully to EigenLayer\n", utils.EmojiCheckMark)
return nil
},
}

return registerCmd
}

func validateAndMigrateConfigFile(path string) (*types.OperatorConfigNew, error) {
operatorCfg := types.OperatorConfigNew{}
var operatorCfgOld types.OperatorConfig
err := utils.ReadYamlConfig(path, &operatorCfgOld)
if err != nil {
return nil, err
}
if operatorCfgOld.ELSlasherAddress != "" || operatorCfgOld.BlsPublicKeyCompendiumAddress != "" {
fmt.Printf("%s Old config detected, migrating to new config\n", utils.EmojiCheckMark)
operatorCfg = types.OperatorConfigNew{
Operator: operatorCfgOld.Operator,
ELDelegationManager: operatorCfgOld.ELSlasherAddress, // How to get that?
EthRPCUrl: operatorCfgOld.EthRPCUrl,
PrivateKeyStorePath: operatorCfgOld.PrivateKeyStorePath,
SignerType: operatorCfgOld.SignerType,
BlsPrivateKeyStorePath: operatorCfgOld.BlsPrivateKeyStorePath,
ChainId: operatorCfgOld.ChainId,
}

fmt.Printf("%s Backing up old config file to %s", utils.EmojiWait, path+".old")
err := os.Rename(path, path+".old")
if err != nil {
return nil, err
}
fmt.Printf("\r%s Old Config file backed up at %s\n", utils.EmojiCheckMark, path+".old")
fmt.Printf("Writing new config to %s", path)
yamlData, err := yaml.Marshal(&operatorCfg)
if err != nil {
return nil, err
}
err = os.WriteFile(path, yamlData, 0o644)
if err != nil {
return nil, err
}
fmt.Printf("\r%s New config file written to %s\n", utils.EmojiCheckMark, path)
} else {
err = utils.ReadYamlConfig(path, &operatorCfg)
if err != nil {
return nil, err
}
}
return &operatorCfg, nil
}

func getTransactionLink(txHash string, chainId *big.Int) string {
// Create chainId for eth and goerli
ethChainId := big.NewInt(1)
Expand Down
Loading

0 comments on commit 607c07b

Please sign in to comment.