Skip to content

Commit

Permalink
Feature/bump eigenware (#257)
Browse files Browse the repository at this point in the history
  • Loading branch information
iStrike7 and goncer authored Oct 7, 2024
1 parent a99ebc9 commit e2f9977
Show file tree
Hide file tree
Showing 99 changed files with 17,365 additions and 50,951 deletions.
17 changes: 9 additions & 8 deletions avs-aggregator/aggregator.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (
sdklogging "github.com/Layr-Labs/eigensdk-go/logging"
"github.com/Layr-Labs/eigensdk-go/services/avsregistry"
blsagg "github.com/Layr-Labs/eigensdk-go/services/bls_aggregation"
operatorpubkeys "github.com/Layr-Labs/eigensdk-go/services/operatorpubkeys"
oprsinfoserv "github.com/Layr-Labs/eigensdk-go/services/operatorsinfo"
sdktypes "github.com/Layr-Labs/eigensdk-go/types"
"github.com/mangata-finance/eigen-layer-monorepo/avs-aggregator/core"
"github.com/mangata-finance/eigen-layer-monorepo/avs-aggregator/core/chainio"
Expand Down Expand Up @@ -83,6 +83,8 @@ type Aggregator struct {
opStateUpdater *OpStateUpdater
}

const waitForReceipt = bool(true)

// NewAggregator creates a new Aggregator with the provided config.
func NewAggregator(c *Config) (*Aggregator, error) {
logger, err := sdklogging.NewZapLogger(c.LogLevel)
Expand All @@ -107,7 +109,7 @@ func NewAggregator(c *Config) (*Aggregator, error) {
return nil, err
}

chainId, err := ethRpc.Clients.EthHttpClient.ChainID(context.Background())
chainId, err := ethRpc.AvsReader.AvsServiceBindings.EthClient.ChainID(context.Background())
if err != nil {
logger.Error("Cannot get chainId", "err", err)
return nil, err
Expand All @@ -123,16 +125,15 @@ func NewAggregator(c *Config) (*Aggregator, error) {
return nil, err
}

pubkeyService := operatorpubkeys.NewOperatorPubkeysServiceInMemory(
operatorPubkeysService := oprsinfoserv.NewOperatorsInfoServiceInMemory(
context.Background(),
ethRpc.Clients.AvsRegistryChainSubscriber,
ethRpc.Clients.AvsRegistryChainReader,
ethRpc.Clients.EthHttpClient,
c.AvsDeploymentBlock,
50_000,
nil,
oprsinfoserv.Opts{},
logger,
)
avsRegistryService := avsregistry.NewAvsRegistryServiceChainCaller(ethRpc.Clients.AvsRegistryChainReader, pubkeyService, logger)
avsRegistryService := avsregistry.NewAvsRegistryServiceChainCaller(ethRpc.Clients.AvsRegistryChainReader, operatorPubkeysService, logger)
blsAggregationService := blsagg.NewBlsAggregatorService(avsRegistryService, c.DebounceRpc, logger)

substrateRpc, err := gsrpc.NewSubstrateAPI(c.SubstrateWsRpcUrl)
Expand All @@ -147,7 +148,7 @@ func NewAggregator(c *Config) (*Aggregator, error) {
return nil, err
}

opStateUpdater, err := NewOpStateUpdater(logger, ethRpc, avsRegistryService, c.MinOpUpdateInterval)
opStateUpdater, err := NewOpStateUpdater(logger, ethRpc, c.MinOpUpdateInterval)
if err != nil {
logger.Error("Cannot create operator stakes updateer", "err", err)
return nil, err
Expand Down
2 changes: 1 addition & 1 deletion avs-aggregator/bindings/BLSSignatureChecker/binding.go

Large diffs are not rendered by default.

213 changes: 5 additions & 208 deletions avs-aggregator/bindings/DelegationManager/binding.go

Large diffs are not rendered by default.

420 changes: 404 additions & 16 deletions avs-aggregator/bindings/FinalizerServiceManager/binding.go

Large diffs are not rendered by default.

95 changes: 93 additions & 2 deletions avs-aggregator/bindings/FinalizerTaskManager/binding.go

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion avs-aggregator/bindings/GaspMultiRollupService/binding.go

Large diffs are not rendered by default.

837 changes: 837 additions & 0 deletions avs-aggregator/bindings/IndexRegistry/binding.go

Large diffs are not rendered by default.

66 changes: 64 additions & 2 deletions avs-aggregator/bindings/OperatorStateRetrieverExtended/binding.go

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion avs-aggregator/bindings/StakeRegistry/binding.go

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion avs-aggregator/compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ services:
- CHAIN_ID=31337
- AVS_SERVER_IP_PORT_ADDRESS=0.0.0.0:8090
- AVS_BLOCK_VALIDATION_PERIOD=${AVS_BLOCK_VALIDATION_PERIOD:-5}
- AVS_REGISTRY_COORDINATOR_ADDR=0x851356ae760d987E095750cCeb3bC6014560891C
- AVS_REGISTRY_COORDINATOR_ADDR=0xf5059a5D33d5853360D16C683c16e67980206f36
- ECDSA_KEY_JSON={"address":"a0ee7a142d267c1f36714e4a8f75612f20a79720","crypto":{"cipher":"aes-128-ctr","ciphertext":"b0f6f8e3ba33f0b382b080de6661d827181de480f1a4f94bc20d66cb3d585907","cipherparams":{"iv":"4e3f9a8ca6ef8d1cd408e8aaae3c22d2"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"c8f9f8cc03913e09cee7e1fd68732fac327576203ab277d740270f1dea82ee7e"},"mac":"353d65850b20d5fdb90ca2385c52e5b57662cb1d906fd58143f20a7720723cf6"},"id":"d3036cc7-d068-4f2f-9667-60aaca660e61","version":3}
- TESTNET=true
- ECDSA_EPHEMERAL_KEY=true
Expand Down
30 changes: 24 additions & 6 deletions avs-aggregator/core/chainio/avs_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import (
"strings"
"errors"

"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"

"github.com/Layr-Labs/eigensdk-go/chainio/clients/eth"
"github.com/Layr-Labs/eigensdk-go/utils"
"github.com/Layr-Labs/eigensdk-go/crypto/bls"
logging "github.com/Layr-Labs/eigensdk-go/logging"

Expand Down Expand Up @@ -41,7 +42,7 @@ var _ AvsReaderer = (*AvsReader)(nil)

func NewAvsReaderFromConfig(
registry common.Address,
ethClient eth.Client,
ethClient *ethclient.Client,
logger logging.Logger,
) (*AvsReader, error) {
avsServiceBindings, err := NewAvsServiceBindings(registry, ethClient, logger)
Expand Down Expand Up @@ -189,7 +190,7 @@ func (r *AvsReader) LastCompletedOpTaskCreatedBlockAtBlock(
func (r *AvsReader) GetRdTaskRespondedEvents(ctx context.Context, blocksAgo uint32) ([]taskmanager.ContractFinalizerTaskManagerRdTaskResponded, error) {
events := []taskmanager.ContractFinalizerTaskManagerRdTaskResponded{}

currentBlock, err := r.AvsServiceBindings.ethClient.BlockNumber(ctx)
currentBlock, err := r.AvsServiceBindings.EthClient.BlockNumber(ctx)
if err != nil {
r.logger.Error("Cannot get current block number", "err", err)
return nil, err
Expand All @@ -216,7 +217,7 @@ func (r *AvsReader) GetNonSigningOperatorPubKeys(event taskmanager.ContractFinal
// get the nonSignerStakesAndSignature
txHash := event.Raw.TxHash
// r.logger.Debug("txHash", "txHash", txHash)
tx, _, err := r.AvsServiceBindings.ethClient.TransactionByHash(context.Background(), txHash)
tx, _, err := r.AvsServiceBindings.EthClient.TransactionByHash(context.Background(), txHash)
_ = tx
if err != nil {
r.logger.Error("Error getting transaction by hash",
Expand Down Expand Up @@ -318,7 +319,7 @@ func (r *AvsReader) GetTypedOperatorsStakesForQuorumAtBlock(ctx context.Context,
operatorsAvsState := make(map[sdktypes.OperatorId]types.OperatorAvsState)
operatorsStakesInQuorums, err := r.AvsServiceBindings.OperatorStateRetrieverExtended.GetOperatorsStakesForQuorum(&bind.CallOpts{Context: ctx, BlockNumber: big.NewInt(int64(blockNumber))}, registryCoordinatorAddr, quorumNumbers.UnderlyingType(), operatorAddr)
if err != nil {
return nil, sdktypes.WrapError(errors.New("Failed to get operator state"), err)
return nil, utils.WrapError(errors.New("Failed to get operator state"), err)
}
numquorums := len(quorumNumbers)
if len(operatorsStakesInQuorums) != numquorums {
Expand Down Expand Up @@ -350,7 +351,7 @@ func (r *AvsReader) GetOperatorsAvsStateAtBlock(ctx context.Context, registryCoo
// Get operator state for each quorum by querying BLSOperatorStateRetriever (this call is why this service implementation is called ChainCaller)
operatorsStakesInQuorums, err := r.AvsServiceBindings.OperatorStateRetrieverExtended.GetOperatorState(&bind.CallOpts{Context: ctx}, registryCoordinatorAddr, quorumNumbers.UnderlyingType(), blockNumber)
if err != nil {
return nil, sdktypes.WrapError(errors.New("Failed to get operator state"), err)
return nil, utils.WrapError(errors.New("Failed to get operator state"), err)
}
numquorums := len(quorumNumbers)
if len(operatorsStakesInQuorums) != numquorums {
Expand All @@ -374,4 +375,21 @@ func (r *AvsReader) GetOperatorsAvsStateAtBlock(ctx context.Context, registryCoo
}

return operatorsAvsState, nil
}

func (r *AvsReader) GetOperatorIdList(
opts *bind.CallOpts,
quorum sdktypes.QuorumNum,
blockNumber uint32,
) ([]sdktypes.OperatorId, error) {
ids, err := r.AvsServiceBindings.IndexRegistry.GetOperatorListAtBlockNumber(opts, quorum.UnderlyingType(), blockNumber)
if err != nil {
r.logger.Error("Cannot get operator list", "err", err)
return nil, err
}
operatorIds := make([]sdktypes.OperatorId, 0)
for _, id := range ids {
operatorIds = append(operatorIds, id)
}
return operatorIds, nil
}
4 changes: 2 additions & 2 deletions avs-aggregator/core/chainio/avs_subscriber.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import (
gethcommon "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/ethclient"

"github.com/Layr-Labs/eigensdk-go/chainio/clients/eth"
sdklogging "github.com/Layr-Labs/eigensdk-go/logging"

taskmanager "github.com/mangata-finance/eigen-layer-monorepo/avs-aggregator/bindings/FinalizerTaskManager"
Expand All @@ -24,7 +24,7 @@ type AvsSubscriber struct {
logger sdklogging.Logger
}

func NewAvsSubscriber(registryAddr gethcommon.Address, ethclient eth.Client, logger sdklogging.Logger) (*AvsSubscriber, error) {
func NewAvsSubscriber(registryAddr gethcommon.Address, ethclient *ethclient.Client, logger sdklogging.Logger) (*AvsSubscriber, error) {
avsContractBindings, err := NewAvsServiceBindings(registryAddr, ethclient, logger)
if err != nil {
logger.Errorf("Failed to create contract bindings", "err", err)
Expand Down
16 changes: 9 additions & 7 deletions avs-aggregator/core/chainio/avs_writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,17 @@ import (
"github.com/ethereum/go-ethereum/common"
gethcommon "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"

"github.com/Layr-Labs/eigensdk-go/chainio/clients/eth"
"github.com/Layr-Labs/eigensdk-go/chainio/txmgr"
logging "github.com/Layr-Labs/eigensdk-go/logging"
sdktypes "github.com/Layr-Labs/eigensdk-go/types"

taskmanager "github.com/mangata-finance/eigen-layer-monorepo/avs-aggregator/bindings/FinalizerTaskManager"
)

const waitForReceipt = bool(true)

type AvsWriterer interface {
SendNewRdTask(
ctx context.Context,
Expand All @@ -42,7 +44,7 @@ type AvsWriter struct {
logger logging.Logger
}

func NewAvsWriter(txMgr txmgr.TxManager, registryAddr gethcommon.Address, ethHttpClient eth.Client, logger logging.Logger) (*AvsWriter, error) {
func NewAvsWriter(txMgr txmgr.TxManager, registryAddr gethcommon.Address, ethHttpClient *ethclient.Client, logger logging.Logger) (*AvsWriter, error) {
avsServiceBindings, err := NewAvsServiceBindings(registryAddr, ethHttpClient, logger)
if err != nil {
logger.Error("Failed to create contract bindings", "err", err)
Expand All @@ -69,7 +71,7 @@ func (w *AvsWriter) SendNewOpTask(ctx context.Context, quorumThresholdPercentage
return taskmanager.IFinalizerTaskManagerOpTask{}, 0, err
}

receipt, err := w.txMgr.Send(ctx, tx)
receipt, err := w.txMgr.Send(ctx, tx, waitForReceipt)
if err != nil {
return taskmanager.IFinalizerTaskManagerOpTask{}, 0, errors.New("failed to send tx with err: " + err.Error())
}
Expand Down Expand Up @@ -99,7 +101,7 @@ func (w *AvsWriter) SendNewRdTask(ctx context.Context, chainToUpdate uint8, chai
return taskmanager.IFinalizerTaskManagerRdTask{}, 0, err
}

receipt, err := w.txMgr.Send(ctx, tx)
receipt, err := w.txMgr.Send(ctx, tx, waitForReceipt)
if err != nil {
return taskmanager.IFinalizerTaskManagerRdTask{}, 0, errors.New("failed to send tx with err: " + err.Error())
}
Expand Down Expand Up @@ -128,7 +130,7 @@ func (w *AvsWriter) SendAggregatedOpTaskResponse(ctx context.Context, task taskm
return nil, err
}

receipt, err := w.txMgr.Send(ctx, tx)
receipt, err := w.txMgr.Send(ctx, tx, waitForReceipt)
if err != nil {
return nil, errors.New("failed to send tx with err: " + err.Error())
}
Expand All @@ -153,7 +155,7 @@ func (w *AvsWriter) SendAggregatedRdTaskResponse(ctx context.Context, task taskm
return nil, err
}

receipt, err := w.txMgr.Send(ctx, tx)
receipt, err := w.txMgr.Send(ctx, tx, waitForReceipt)
if err != nil {
return nil, errors.New("failed to send tx with err: " + err.Error())
}
Expand All @@ -177,7 +179,7 @@ func (w *AvsWriter) EjectOperators(ctx context.Context, operators []common.Addre
return nil, err
}

receipt, err := w.txMgr.Send(ctx, tx)
receipt, err := w.txMgr.Send(ctx, tx, waitForReceipt)
if err != nil {
return nil, errors.New("failed to send tx with err: " + err.Error())
}
Expand Down
36 changes: 25 additions & 11 deletions avs-aggregator/core/chainio/bindings.go
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
package chainio

import (
"github.com/Layr-Labs/eigensdk-go/chainio/clients/eth"
"github.com/Layr-Labs/eigensdk-go/logging"
regcoord "github.com/Layr-Labs/eigensdk-go/contracts/bindings/RegistryCoordinator"

"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"

servicemanager "github.com/mangata-finance/eigen-layer-monorepo/avs-aggregator/bindings/FinalizerServiceManager"
taskmanager "github.com/mangata-finance/eigen-layer-monorepo/avs-aggregator/bindings/FinalizerTaskManager"
blsSignatureChecker "github.com/mangata-finance/eigen-layer-monorepo/avs-aggregator/bindings/BLSSignatureChecker"
delegationManager "github.com/mangata-finance/eigen-layer-monorepo/avs-aggregator/bindings/DelegationManager"
stakeRegistry "github.com/mangata-finance/eigen-layer-monorepo/avs-aggregator/bindings/StakeRegistry"
indexRegistry "github.com/mangata-finance/eigen-layer-monorepo/avs-aggregator/bindings/IndexRegistry"
operatorStateRetrieverExtended "github.com/mangata-finance/eigen-layer-monorepo/avs-aggregator/bindings/OperatorStateRetrieverExtended"
)

Expand All @@ -22,19 +23,20 @@ type AvsServiceBindings struct {
ServiceManager *servicemanager.ContractFinalizerServiceManager
BlsSignatureChecker *blsSignatureChecker.ContractBLSSignatureChecker
StakeRegistry *stakeRegistry.ContractStakeRegistry
IndexRegistry *indexRegistry.ContractIndexRegistry
DelegationManager *delegationManager.ContractDelegationManager
OperatorStateRetrieverExtended *operatorStateRetrieverExtended.ContractOperatorStateRetrieverExtended
OperatorStateRetriever common.Address
DelegationManagerAddress common.Address
TaskManagerAddress common.Address
StakeRegistryAddress common.Address
RegistryCoordinatorAddress common.Address
ethClient eth.Client
EthClient *ethclient.Client
logger logging.Logger
}

func NewAvsServiceBindings(registryCoordinatorAddr common.Address, ethclient eth.Client, logger logging.Logger) (*AvsServiceBindings, error) {
contractRegistryCoordinator, err := regcoord.NewContractRegistryCoordinator(registryCoordinatorAddr, ethclient)
func NewAvsServiceBindings(registryCoordinatorAddr common.Address, EthClient *ethclient.Client, logger logging.Logger) (*AvsServiceBindings, error) {
contractRegistryCoordinator, err := regcoord.NewContractRegistryCoordinator(registryCoordinatorAddr, EthClient)
if err != nil {
return nil, err
}
Expand All @@ -44,7 +46,7 @@ func NewAvsServiceBindings(registryCoordinatorAddr common.Address, ethclient eth
logger.Error("Failed to fetch ServiceManager address", "err", err)
return nil, err
}
contractServiceManager, err := servicemanager.NewContractFinalizerServiceManager(serviceManagerAddr, ethclient)
contractServiceManager, err := servicemanager.NewContractFinalizerServiceManager(serviceManagerAddr, EthClient)
if err != nil {
logger.Error("Failed to fetch IServiceManager contract", "err", err)
return nil, err
Expand All @@ -55,7 +57,7 @@ func NewAvsServiceBindings(registryCoordinatorAddr common.Address, ethclient eth
logger.Error("Failed to fetch TaskManager address", "err", err)
return nil, err
}
contractTaskManager, err := taskmanager.NewContractFinalizerTaskManager(taskManagerAddr, ethclient)
contractTaskManager, err := taskmanager.NewContractFinalizerTaskManager(taskManagerAddr, EthClient)
if err != nil {
logger.Error("Failed to fetch IIncredibleSquaringTaskManager contract", "err", err)
return nil, err
Expand All @@ -67,7 +69,7 @@ func NewAvsServiceBindings(registryCoordinatorAddr common.Address, ethclient eth
logger.Error("Failed to fetch TaskManager address", "err", err)
return nil, err
}
contractBlsSignatureChecker, err := blsSignatureChecker.NewContractBLSSignatureChecker(blsSignatureCheckerAddr, ethclient)
contractBlsSignatureChecker, err := blsSignatureChecker.NewContractBLSSignatureChecker(blsSignatureCheckerAddr, EthClient)
if err != nil {
logger.Error("Failed to fetch TaskManager contract", "err", err)
return nil, err
Expand All @@ -79,18 +81,29 @@ func NewAvsServiceBindings(registryCoordinatorAddr common.Address, ethclient eth
logger.Error("Failed to fetch StakeRegistry address", "err", err)
return nil, err
}
contractStakeRegistry, err := stakeRegistry.NewContractStakeRegistry(stakeRegistryAddr, ethclient)
contractStakeRegistry, err := stakeRegistry.NewContractStakeRegistry(stakeRegistryAddr, EthClient)
if err != nil {
logger.Error("Failed to fetch StakeRegistry contract", "err", err)
return nil, err
}

indexRegistryAddr, err := contractRegistryCoordinator.IndexRegistry(&bind.CallOpts{})
if err != nil {
logger.Error("Failed to fetch IndexRegistry address", "err", err)
return nil, err
}
contractIndexRegistry, err := indexRegistry.NewContractIndexRegistry(indexRegistryAddr, EthClient)
if err != nil {
logger.Error("Failed to fetch IndexRegistry contract", "err", err)
return nil, err
}

delegationManagerAddr, err := contractStakeRegistry.Delegation(&bind.CallOpts{})
if err != nil {
logger.Error("Failed to fetch DelegationManager address", "err", err)
return nil, err
}
contractDelegationManager, err := delegationManager.NewContractDelegationManager(delegationManagerAddr, ethclient)
contractDelegationManager, err := delegationManager.NewContractDelegationManager(delegationManagerAddr, EthClient)
if err != nil {
logger.Error("Failed to fetch DelegationManager contract", "err", err)
return nil, err
Expand All @@ -101,7 +114,7 @@ func NewAvsServiceBindings(registryCoordinatorAddr common.Address, ethclient eth
logger.Error("Failed to fetch OperatorStateRetrieverExtended address", "err", err)
return nil, err
}
contractOperatorStateRetrieverExtended, err := operatorStateRetrieverExtended.NewContractOperatorStateRetrieverExtended(operatorStateRetrieverExtendedAddr, ethclient)
contractOperatorStateRetrieverExtended, err := operatorStateRetrieverExtended.NewContractOperatorStateRetrieverExtended(operatorStateRetrieverExtendedAddr, EthClient)
if err != nil {
logger.Error("Failed to fetch OperatorStateRetrieverExtended contract", "err", err)
return nil, err
Expand All @@ -113,14 +126,15 @@ func NewAvsServiceBindings(registryCoordinatorAddr common.Address, ethclient eth
TaskManager: contractTaskManager,
BlsSignatureChecker: contractBlsSignatureChecker,
StakeRegistry: contractStakeRegistry,
IndexRegistry: contractIndexRegistry,
DelegationManager: contractDelegationManager,
OperatorStateRetrieverExtended: contractOperatorStateRetrieverExtended,
OperatorStateRetriever: taskManagerAddr,
DelegationManagerAddress: delegationManagerAddr,
TaskManagerAddress: taskManagerAddr,
StakeRegistryAddress: stakeRegistryAddr,
RegistryCoordinatorAddress: registryCoordinatorAddr,
ethClient: ethclient,
EthClient: EthClient,
logger: logger,
}, nil
}
Loading

0 comments on commit e2f9977

Please sign in to comment.