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

feat: add missing contract addresses on BuildAllConfig #558

Merged
merged 6 commits into from
Feb 12, 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
1 change: 0 additions & 1 deletion .github/workflows/bindings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ jobs:
filters: |
contracts:
- 'contracts/lib/**'
- 'contracts/script/**'
- 'contracts/src/**'
bindings:
- 'contracts/bindings/**'
Expand Down
55 changes: 36 additions & 19 deletions chainio/clients/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,15 @@ import (
)

type BuildAllConfig struct {
EthHttpUrl string
EthWsUrl string
RegistryCoordinatorAddr string
OperatorStateRetrieverAddr string
AvsName string
PromMetricsIpPortAddress string
EthHttpUrl string
EthWsUrl string
AvsName string
PromMetricsIpPortAddress string

RegistryCoordinatorAddr string
OperatorStateRetrieverAddr string
RewardsCoordinatorAddress string
PermissionControllerAddress string

/// The address of the ServiceManager contract.
ServiceManagerAddress string
Expand Down Expand Up @@ -196,12 +199,20 @@ func BuildAll(
return nil, utils.WrapError("Failed to create AVS Registry Reader and Writer", err)
}

elcontractsCfg := elcontracts.Config{
DelegationManagerAddress: avsRegistryContractBindings.DelegationManagerAddr,
AvsDirectoryAddress: avsRegistryContractBindings.AvsDirectoryAddr,
}
if config.RewardsCoordinatorAddress != "" {
elcontractsCfg.RewardsCoordinatorAddress = gethcommon.HexToAddress(config.RewardsCoordinatorAddress)
}
if config.PermissionControllerAddress != "" {
elcontractsCfg.PermissionControllerAddress = gethcommon.HexToAddress(config.PermissionControllerAddress)
}

// creating EL clients: Reader, Writer and EigenLayer Contract Bindings
elChainReader, elChainWriter, elContractBindings, err := elcontracts.BuildClients(
elcontracts.Config{
DelegationManagerAddress: avsRegistryContractBindings.DelegationManagerAddr,
AvsDirectoryAddress: avsRegistryContractBindings.AvsDirectoryAddr,
},
elcontractsCfg,
ethHttpClient,
txMgr,
logger,
Expand Down Expand Up @@ -244,24 +255,30 @@ func (config *BuildAllConfig) validate(logger logging.Logger) error {
logger.Error("BuildAllConfig.validate: Missing eth ws url")
return fmt.Errorf("BuildAllConfig.validate: Missing eth ws url")
}
if config.AvsName == "" {
logger.Error("BuildAllConfig.validate: Missing avs name")
return fmt.Errorf("BuildAllConfig.validate: Missing avs name")
}
if config.PromMetricsIpPortAddress == "" {
logger.Error("BuildAllConfig.validate: Missing prometheus metrics ip port address")
return fmt.Errorf("BuildAllConfig.validate: Missing prometheus metrics ip port address")
}
if config.RegistryCoordinatorAddr == "" {
logger.Error("BuildAllConfig.validate: Missing bls registry coordinator address")
return fmt.Errorf("BuildAllConfig.validate: Missing bls registry coordinator address")
}
if config.ServiceManagerAddress == "" {
logger.Info("BuildAllConfig.validate: Missing optional service manager address")
}
if config.OperatorStateRetrieverAddr == "" {
logger.Error("BuildAllConfig.validate: Missing bls operator state retriever address")
return fmt.Errorf("BuildAllConfig.validate: Missing bls operator state retriever address")
}
if config.AvsName == "" {
logger.Error("BuildAllConfig.validate: Missing avs name")
return fmt.Errorf("BuildAllConfig.validate: Missing avs name")
if config.RewardsCoordinatorAddress == "" {
logger.Info("BuildAllConfig.validate: Missing optional rewards coordinator address")
}
if config.PromMetricsIpPortAddress == "" {
logger.Error("BuildAllConfig.validate: Missing prometheus metrics ip port address")
return fmt.Errorf("BuildAllConfig.validate: Missing prometheus metrics ip port address")
if config.PermissionControllerAddress == "" {
logger.Info("BuildAllConfig.validate: Missing optional permission controller address")
}
if config.ServiceManagerAddress == "" {
logger.Info("BuildAllConfig.validate: Missing optional service manager address")
}
return nil
}
4 changes: 2 additions & 2 deletions chainio/clients/elcontracts/bindings.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,11 @@ func NewBindingsFromConfig(
}
}

if isZeroAddress(cfg.PermissionsControllerAddress) {
if isZeroAddress(cfg.PermissionControllerAddress) {
logger.Debug("PermissionController address not provided, the calls to the contract will not work")
} else {
permissionController, err = permissioncontroller.NewContractPermissionController(
cfg.PermissionsControllerAddress,
cfg.PermissionControllerAddress,
client,
)
if err != nil {
Expand Down
8 changes: 4 additions & 4 deletions chainio/clients/elcontracts/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ import (
)

type Config struct {
DelegationManagerAddress gethcommon.Address
AvsDirectoryAddress gethcommon.Address
RewardsCoordinatorAddress gethcommon.Address
PermissionsControllerAddress gethcommon.Address
DelegationManagerAddress gethcommon.Address
AvsDirectoryAddress gethcommon.Address
RewardsCoordinatorAddress gethcommon.Address
PermissionControllerAddress gethcommon.Address
}

type ChainReader struct {
Expand Down
16 changes: 7 additions & 9 deletions chainio/clients/elcontracts/reader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -502,7 +502,7 @@ func TestCheckClaim(t *testing.T) {
}

func TestGetAllocatableMagnitudeAndGetMaxMagnitudes(t *testing.T) {
// Without changes, Allocable magnitude is max magnitude
// Without changes, Allocatable magnitude is max magnitude

// Test setup
ctx := context.Background()
Expand Down Expand Up @@ -601,10 +601,9 @@ func TestAdminFunctions(t *testing.T) {
anvilHttpEndpoint, err := anvilC.Endpoint(context.Background(), "http")
assert.NoError(t, err)

permissionControllerAddr := common.HexToAddress(testutils.PERMISSION_CONTROLLER_ADDRESS)
config := elcontracts.Config{
PermissionsControllerAddress: permissionControllerAddr,
}
contractAddrs := testutils.GetContractAddressesFromContractRegistry(anvilHttpEndpoint)

config := elcontracts.Config{PermissionControllerAddress: contractAddrs.PermissionController}

operatorAddr := common.HexToAddress(testutils.ANVIL_FIRST_ADDRESS)
privateKeyHex := testutils.ANVIL_FIRST_PRIVATE_KEY
Expand Down Expand Up @@ -690,10 +689,9 @@ func TestAppointeesFunctions(t *testing.T) {
anvilHttpEndpoint, err := anvilC.Endpoint(context.Background(), "http")
assert.NoError(t, err)

permissionControllerAddr := common.HexToAddress(testutils.PERMISSION_CONTROLLER_ADDRESS)
config := elcontracts.Config{
PermissionsControllerAddress: permissionControllerAddr,
}
contractAddrs := testutils.GetContractAddressesFromContractRegistry(anvilHttpEndpoint)

config := elcontracts.Config{PermissionControllerAddress: contractAddrs.PermissionController}

chainReader, err := testclients.NewTestChainReaderFromConfig(anvilHttpEndpoint, config)
assert.NoError(t, err)
Expand Down
22 changes: 8 additions & 14 deletions chainio/clients/elcontracts/writer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -696,12 +696,11 @@ func TestSetAndRemovePermission(t *testing.T) {
anvilHttpEndpoint, err := anvilC.Endpoint(context.Background(), "http")
require.NoError(t, err)
contractAddrs := testutils.GetContractAddressesFromContractRegistry(anvilHttpEndpoint)
permissionControllerAddr := common.HexToAddress(testutils.PERMISSION_CONTROLLER_ADDRESS)

privateKeyHex := testutils.ANVIL_FIRST_PRIVATE_KEY
config := elcontracts.Config{
DelegationManagerAddress: contractAddrs.DelegationManager,
PermissionsControllerAddress: permissionControllerAddr,
DelegationManagerAddress: contractAddrs.DelegationManager,
PermissionControllerAddress: contractAddrs.PermissionController,
}
chainWriter, err := testclients.NewTestChainWriterFromConfig(anvilHttpEndpoint, privateKeyHex, config)
require.NoError(t, err)
Expand Down Expand Up @@ -942,13 +941,11 @@ func TestAddAndRemovePendingAdmin(t *testing.T) {
require.NoError(t, err)
contractAddrs := testutils.GetContractAddressesFromContractRegistry(anvilHttpEndpoint)

permissionControllerAddr := common.HexToAddress(testutils.PERMISSION_CONTROLLER_ADDRESS)

operatorAddr := common.HexToAddress(testutils.ANVIL_FIRST_ADDRESS)
privateKeyHex := testutils.ANVIL_FIRST_PRIVATE_KEY
config := elcontracts.Config{
DelegationManagerAddress: contractAddrs.DelegationManager,
PermissionsControllerAddress: permissionControllerAddr,
DelegationManagerAddress: contractAddrs.DelegationManager,
PermissionControllerAddress: contractAddrs.PermissionController,
}
chainWriter, err := testclients.NewTestChainWriterFromConfig(anvilHttpEndpoint, privateKeyHex, config)
require.NoError(t, err)
Expand Down Expand Up @@ -1007,13 +1004,12 @@ func TestAcceptAdmin(t *testing.T) {
anvilHttpEndpoint, err := anvilC.Endpoint(context.Background(), "http")
require.NoError(t, err)
contractAddrs := testutils.GetContractAddressesFromContractRegistry(anvilHttpEndpoint)
permissionControllerAddr := common.HexToAddress(testutils.PERMISSION_CONTROLLER_ADDRESS)

accountAddr := common.HexToAddress(testutils.ANVIL_FIRST_ADDRESS)
accountPrivateKeyHex := testutils.ANVIL_FIRST_PRIVATE_KEY
config := elcontracts.Config{
DelegationManagerAddress: contractAddrs.DelegationManager,
PermissionsControllerAddress: permissionControllerAddr,
DelegationManagerAddress: contractAddrs.DelegationManager,
PermissionControllerAddress: contractAddrs.PermissionController,
}
accountChainWriter, err := testclients.NewTestChainWriterFromConfig(anvilHttpEndpoint, accountPrivateKeyHex, config)
require.NoError(t, err)
Expand Down Expand Up @@ -1068,13 +1064,11 @@ func TestRemoveAdmin(t *testing.T) {
require.NoError(t, err)
contractAddrs := testutils.GetContractAddressesFromContractRegistry(anvilHttpEndpoint)

permissionControllerAddr := common.HexToAddress(testutils.PERMISSION_CONTROLLER_ADDRESS)

accountAddr := common.HexToAddress(testutils.ANVIL_FIRST_ADDRESS)
accountPrivateKeyHex := testutils.ANVIL_FIRST_PRIVATE_KEY
config := elcontracts.Config{
DelegationManagerAddress: contractAddrs.DelegationManager,
PermissionsControllerAddress: permissionControllerAddr,
DelegationManagerAddress: contractAddrs.DelegationManager,
PermissionControllerAddress: contractAddrs.PermissionController,
}
accountChainWriter, err := testclients.NewTestChainWriterFromConfig(anvilHttpEndpoint, accountPrivateKeyHex, config)
require.NoError(t, err)
Expand Down
2 changes: 1 addition & 1 deletion contracts/anvil/contracts-deployed-anvil-state.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions contracts/script/DeployMockAvsRegistries.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -215,5 +215,6 @@ contract DeployMockAvsRegistries is Script, ConfigsReadWriter, EigenlayerContrac
registry.registerContract("delegationManager", address(eigen.delegationManager));
registry.registerContract("strategyManager", address(eigen.strategyManager));
registry.registerContract("rewardsCoordinator", address(eigen.rewardsCoordinator));
registry.registerContract("permissionController", address(eigen.permissionController));
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"addresses": {
"erc20mock": "0xDC11f7E700A4c898AE5CAddB1082cFfa76512aDD",
"erc20mockstrategy": "0x36b58F5C1969B7b6591D752ea6F5486D069010AB"
"erc20mock": "0x51A1ceB83B83F1985a81C295d1fF28Afef186E02",
"erc20mockstrategy": "0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7"
}
}
13 changes: 9 additions & 4 deletions testutils/anvil.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,6 @@ const (
ANVIL_THIRD_PRIVATE_KEY = "5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a"
)

// This address is hardcoded because it is required by the elcontracts tests but is not
// registered in the ContractRegistry in the contracts-deployed-anvil-state.json anvil state.
const PERMISSION_CONTROLLER_ADDRESS = "610178dA211FEF7D417bC0e6FeD39F05609AD788"

func StartAnvilContainer(anvilStateFileName string) (testcontainers.Container, error) {

ctx := context.Background()
Expand Down Expand Up @@ -79,6 +75,7 @@ type ContractAddresses struct {
DelegationManager common.Address
Erc20MockStrategy common.Address
RewardsCoordinator common.Address
PermissionController common.Address
}

func GetContractAddressesFromContractRegistry(ethHttpUrl string) (mockAvsContracts ContractAddresses) {
Expand Down Expand Up @@ -142,13 +139,21 @@ func GetContractAddressesFromContractRegistry(ethHttpUrl string) (mockAvsContrac
if rewardsCoordinatorAddr == (common.Address{}) {
panic("rewardsCoordinatorAddr is empty")
}
permissionControllerAddr, err := contractsRegistry.Contracts(&bind.CallOpts{}, "permissionController")
if err != nil {
panic(err)
}
if permissionControllerAddr == (common.Address{}) {
panic("permissionControllerAddr is empty")
}
mockAvsContracts = ContractAddresses{
ServiceManager: mockAvsServiceManagerAddr,
RegistryCoordinator: mockAvsRegistryCoordinatorAddr,
OperatorStateRetriever: mockAvsOperatorStateRetrieverAddr,
DelegationManager: delegationManagerAddr,
Erc20MockStrategy: erc20MockStrategyAddr,
RewardsCoordinator: rewardsCoordinatorAddr,
PermissionController: permissionControllerAddr,
}
return mockAvsContracts
}
Expand Down
16 changes: 9 additions & 7 deletions testutils/testclients/testclients.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,15 @@ func BuildTestClients(t *testing.T) (*clients.Clients, string) {
require.NoError(t, err)

chainioConfig := clients.BuildAllConfig{
EthHttpUrl: anvilHttpEndpoint,
EthWsUrl: anvilWsEndpoint,
RegistryCoordinatorAddr: contractAddrs.RegistryCoordinator.String(),
OperatorStateRetrieverAddr: contractAddrs.OperatorStateRetriever.String(),
AvsName: "exampleAvs",
PromMetricsIpPortAddress: ":9090",
ServiceManagerAddress: contractAddrs.ServiceManager.String(),
EthHttpUrl: anvilHttpEndpoint,
EthWsUrl: anvilWsEndpoint,
RegistryCoordinatorAddr: contractAddrs.RegistryCoordinator.String(),
OperatorStateRetrieverAddr: contractAddrs.OperatorStateRetriever.String(),
AvsName: "exampleAvs",
PromMetricsIpPortAddress: ":9090",
ServiceManagerAddress: contractAddrs.ServiceManager.String(),
RewardsCoordinatorAddress: contractAddrs.RewardsCoordinator.String(),
PermissionControllerAddress: contractAddrs.PermissionController.String(),
}

clients, err := clients.BuildAll(
Expand Down
Loading