Skip to content
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

Fix/slasher writer fix #327

Merged
merged 3 commits into from
Jan 29, 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
83 changes: 79 additions & 4 deletions core/chainio/avs_writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,23 @@ package chainio
import (
"context"

"github.com/Nuffle-Labs/nffl/core/config"
"github.com/Nuffle-Labs/nffl/core/types/messages"

"github.com/Layr-Labs/eigensdk-go/chainio/clients/avsregistry"
"github.com/Layr-Labs/eigensdk-go/chainio/clients/eth"
"github.com/Layr-Labs/eigensdk-go/chainio/txmgr"
regcoord "github.com/Layr-Labs/eigensdk-go/contracts/bindings/RegistryCoordinator"
logging "github.com/Layr-Labs/eigensdk-go/logging"
eigentypes "github.com/Layr-Labs/eigensdk-go/types"
"github.com/Layr-Labs/eigensdk-go/utils"
"github.com/Nuffle-Labs/nffl/core/config"
"github.com/Nuffle-Labs/nffl/core/types/messages"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
gethcommon "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"

blsapkregistry "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSApkRegistry"
opstateretriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/OperatorStateRetriever"
smbase "github.com/Layr-Labs/eigensdk-go/contracts/bindings/ServiceManagerBase"
stakeregistry "github.com/Layr-Labs/eigensdk-go/contracts/bindings/StakeRegistry"
taskmanager "github.com/Nuffle-Labs/nffl/contracts/bindings/SFFLTaskManager"
)

Expand Down Expand Up @@ -50,6 +56,73 @@ type AvsWriter struct {

var _ AvsWriterer = (*AvsWriter)(nil)

func BuildAvsRegistryChainWriter(
registryCoordinatorAddr gethcommon.Address,
operatorStateRetrieverAddr gethcommon.Address,
logger logging.Logger,
ethClient eth.Client,
txMgr txmgr.TxManager,
) (*avsregistry.AvsRegistryChainWriter, error) {
registryCoordinator, err := regcoord.NewContractRegistryCoordinator(registryCoordinatorAddr, ethClient)
if err != nil {
return nil, utils.WrapError("Failed to create RegistryCoordinator contract", err)
}
operatorStateRetriever, err := opstateretriever.NewContractOperatorStateRetriever(
operatorStateRetrieverAddr,
ethClient,
)
if err != nil {
return nil, utils.WrapError("Failed to create OperatorStateRetriever contract", err)
}
serviceManagerAddr, err := registryCoordinator.ServiceManager(&bind.CallOpts{})
if err != nil {
return nil, utils.WrapError("Failed to get ServiceManager address", err)
}
serviceManager, err := smbase.NewContractServiceManagerBase(serviceManagerAddr, ethClient)
if err != nil {
return nil, utils.WrapError("Failed to create ServiceManager contract", err)
}
blsApkRegistryAddr, err := registryCoordinator.BlsApkRegistry(&bind.CallOpts{})
if err != nil {
return nil, utils.WrapError("Failed to get BLSApkRegistry address", err)
}
blsApkRegistry, err := blsapkregistry.NewContractBLSApkRegistry(blsApkRegistryAddr, ethClient)
if err != nil {
return nil, utils.WrapError("Failed to create BLSApkRegistry contract", err)
}
stakeRegistryAddr, err := registryCoordinator.StakeRegistry(&bind.CallOpts{})
if err != nil {
return nil, utils.WrapError("Failed to get StakeRegistry address", err)
}
stakeRegistry, err := stakeregistry.NewContractStakeRegistry(stakeRegistryAddr, ethClient)
if err != nil {
return nil, utils.WrapError("Failed to create StakeRegistry contract", err)
}
delegationManagerAddr, err := stakeRegistry.Delegation(&bind.CallOpts{})
if err != nil {
return nil, utils.WrapError("Failed to get DelegationManager address", err)
}
avsDirectoryAddr, err := serviceManager.AvsDirectory(&bind.CallOpts{})
if err != nil {
return nil, utils.WrapError("Failed to get AvsDirectory address", err)
}
elReader, err := BuildELChainReader(delegationManagerAddr, avsDirectoryAddr, ethClient, logger)
if err != nil {
return nil, utils.WrapError("Failed to create ELChainReader", err)
}
return avsregistry.NewAvsRegistryChainWriter(
serviceManagerAddr,
registryCoordinator,
operatorStateRetriever,
stakeRegistry,
blsApkRegistry,
elReader,
logger,
ethClient,
txMgr,
)
}

func BuildAvsWriterFromConfig(txMgr txmgr.TxManager, config *config.Config, client eth.Client, logger logging.Logger) (*AvsWriter, error) {
return BuildAvsWriter(txMgr, config.SFFLRegistryCoordinatorAddr, config.OperatorStateRetrieverAddr, client, logger)
}
Expand All @@ -60,7 +133,9 @@ func BuildAvsWriter(txMgr txmgr.TxManager, registryCoordinatorAddr, operatorStat
logger.Error("Failed to create contract bindings", "err", err)
return nil, err
}
avsRegistryWriter, err := avsregistry.BuildAvsRegistryChainWriter(registryCoordinatorAddr, operatorStateRetrieverAddr, logger, ethHttpClient, txMgr)
avsRegistryWriter, err := BuildAvsRegistryChainWriter(registryCoordinatorAddr, operatorStateRetrieverAddr, logger, ethHttpClient, txMgr)
// avsRegistryWriter, err := avsregistry.BuildAvsRegistryChainWriter(registryCoordinatorAddr, operatorStateRetrieverAddr, logger, ethHttpClient, txMgr)

if err != nil {
return nil, err
}
Expand Down
29 changes: 29 additions & 0 deletions core/chainio/el_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,30 @@ func NewEigenlayerContractBindings(
}, nil
}

func BuildELChainReader(
delegationManagerAddr gethcommon.Address,
avsDirectoryAddr gethcommon.Address,
ethClient eth.Client,
logger logging.Logger,
) (*elcontracts.ELChainReader, error) {
elContractBindings, err := NewEigenlayerContractBindings(
delegationManagerAddr,
avsDirectoryAddr,
ethClient,
logger,
)
if err != nil {
return nil, err
}
return elcontracts.NewELChainReader(
elContractBindings.Slasher,
elContractBindings.DelegationManager,
elContractBindings.StrategyManager,
elContractBindings.AvsDirectory,
logger,
ethClient,
), nil
}


func BuildElReader(
Expand All @@ -116,26 +140,31 @@ func BuildElReader(
) (*elcontracts.ELChainReader, error) {
avsRegistryContractBindings, err := utils.NewAVSRegistryContractBindings(registryCoordinatorAddress, operatorStateRetrieverAddress, ethHttpClient, logger)
if err != nil {
logger.Error("Failed to create AVSRegistryContractBindings", "err", err)
return nil, err
}

delegationManagerAddr, err := avsRegistryContractBindings.StakeRegistry.Delegation(&bind.CallOpts{})
if err != nil {
logger.Error("Failed to get DelegationManager address", "err", err)
return nil, err
}

avsDirectoryAddr, err := avsRegistryContractBindings.ServiceManager.AvsDirectory(&bind.CallOpts{})
if err != nil {
logger.Error("Failed to get AvsDirectory address", "err", err)
return nil, err
}


elContractBindings, err := NewEigenlayerContractBindings(
delegationManagerAddr,
avsDirectoryAddr,
ethHttpClient,
logger,
)
if err != nil {
logger.Error("Failed to create EigenlayerContractBindings", "err", err)
return nil, err
}

Expand Down
4 changes: 3 additions & 1 deletion core/chainio/el_writer.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package chainio

import (

"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/txmgr"
Expand All @@ -10,6 +11,7 @@ import (
"github.com/ethereum/go-ethereum/common"
)


func BuildElWriter(
registryCoordinatorAddress common.Address,
operatorStateRetrieverAddress common.Address,
Expand All @@ -32,7 +34,7 @@ func BuildElWriter(
return nil, err
}

elContractBindings, err := utils.NewEigenlayerContractBindings(
elContractBindings, err := NewEigenlayerContractBindings(
delegationManagerAddr,
avsDirectoryAddr,
ethHttpClient,
Expand Down