From 7c211e115dade379922c0d3ce5914e6392da95f5 Mon Sep 17 00:00:00 2001 From: edwin Date: Mon, 29 Apr 2024 16:20:44 +0700 Subject: [PATCH] fix: duplicate operatorAddresses, operatorPubkeys caused by inclusive nature of FilterQuery(fromBlock,toBlock) --- chainio/clients/avsregistry/reader.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/chainio/clients/avsregistry/reader.go b/chainio/clients/avsregistry/reader.go index 5aafeae1c..e87cfd5ee 100644 --- a/chainio/clients/avsregistry/reader.go +++ b/chainio/clients/avsregistry/reader.go @@ -21,6 +21,8 @@ import ( stakeregistry "github.com/Layr-Labs/eigensdk-go/contracts/bindings/StakeRegistry" ) +const QueryBlockRange = 10_000 + type AvsRegistryReader interface { GetQuorumCount(opts *bind.CallOpts) (uint8, error) @@ -363,7 +365,6 @@ func (r *AvsRegistryChainReader) QueryExistingRegisteredOperatorPubKeys( startBlock *big.Int, stopBlock *big.Int, ) ([]types.OperatorAddr, []types.OperatorPubkeys, error) { - blsApkRegistryAbi, err := apkreg.ContractBLSApkRegistryMetaData.GetAbi() if err != nil { return nil, nil, types.WrapError(errors.New("Cannot get Abi"), err) @@ -384,8 +385,9 @@ func (r *AvsRegistryChainReader) QueryExistingRegisteredOperatorPubKeys( operatorPubkeys := make([]types.OperatorPubkeys, 0) // eth_getLogs is limited to a 10,000 range, so we need to iterate over the range - for i := startBlock; i.Cmp(stopBlock) <= 0; i.Add(i, big.NewInt(10_000)) { - toBlock := big.NewInt(0).Add(i, big.NewInt(10_000)) + for i := startBlock; i.Cmp(stopBlock) <= 0; i.Add(i, big.NewInt(QueryBlockRange)) { + // Subtract 1 since FilterQuery is inclusive + toBlock := big.NewInt(0).Add(i, big.NewInt(QueryBlockRange-1)) if toBlock.Cmp(stopBlock) > 0 { toBlock = stopBlock } @@ -405,7 +407,6 @@ func (r *AvsRegistryChainReader) QueryExistingRegisteredOperatorPubKeys( r.logger.Debug("avsRegistryChainReader.QueryExistingRegisteredOperatorPubKeys", "numTransactionLogs", len(logs), "fromBlock", i, "toBlock", toBlock) for _, vLog := range logs { - // get the operator address operatorAddr := gethcommon.HexToAddress(vLog.Topics[1].Hex()) operatorAddresses = append(operatorAddresses, operatorAddr) @@ -437,7 +438,6 @@ func (r *AvsRegistryChainReader) QueryExistingRegisteredOperatorPubKeys( } operatorPubkeys = append(operatorPubkeys, operatorPubkey) - } } @@ -464,8 +464,9 @@ func (r *AvsRegistryChainReader) QueryExistingRegisteredOperatorSockets( operatorIdToSocketMap := make(map[types.OperatorId]types.Socket) // eth_getLogs is limited to a 10,000 range, so we need to iterate over the range - for i := startBlock; i.Cmp(stopBlock) <= 0; i.Add(i, big.NewInt(10_000)) { - toBlock := big.NewInt(0).Add(i, big.NewInt(10_000)) + for i := startBlock; i.Cmp(stopBlock) <= 0; i.Add(i, big.NewInt(QueryBlockRange)) { + // Subtract 1 since FilterQuery is inclusive + toBlock := big.NewInt(0).Add(i, big.NewInt(QueryBlockRange-1)) if toBlock.Cmp(stopBlock) > 0 { toBlock = stopBlock }