Skip to content

Commit

Permalink
Fix operatorsinfo socket bugs (#212)
Browse files Browse the repository at this point in the history
* fix bug in custom iterator logic - I'm dumb

* print socket info in registerOperator debug statement

* add comment above socket type.. unsure about this one

* refactor updateSocketMapping into a fct

* add return statement instead of relying on no-op
  • Loading branch information
samlaf authored Apr 24, 2024
1 parent 7e4caf8 commit d8ca2a5
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 7 deletions.
9 changes: 6 additions & 3 deletions chainio/clients/avsregistry/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,7 @@ func (r *AvsRegistryChainReader) QueryExistingRegisteredOperatorSockets(
}

end := toBlock.Uint64()

filterOpts := &bind.FilterOpts{
Start: i.Uint64(),
End: &end,
Expand All @@ -479,11 +480,13 @@ func (r *AvsRegistryChainReader) QueryExistingRegisteredOperatorSockets(
if err != nil {
return nil, types.WrapError(errors.New("Cannot filter operator socket updates"), err)
}
r.logger.Debug("avsRegistryChainReader.QueryExistingRegisteredOperatorSockets", "fromBlock", i, "toBlock", toBlock)

for update := socketUpdates; update.Event != nil; update.Next() {
operatorIdToSocketMap[update.Event.OperatorId] = types.Socket(update.Event.Socket)
numSocketUpdates := 0
for socketUpdates.Next() {
operatorIdToSocketMap[socketUpdates.Event.OperatorId] = types.Socket(socketUpdates.Event.Socket)
numSocketUpdates++
}
r.logger.Debug("avsRegistryChainReader.QueryExistingRegisteredOperatorSockets", "numTransactionLogs", numSocketUpdates, "fromBlock", i, "toBlock", toBlock)
}
return operatorIdToSocketMap, nil
}
2 changes: 1 addition & 1 deletion chainio/clients/avsregistry/writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ func (w *AvsRegistryChainWriter) RegisterOperatorInQuorumWithAVSRegistryCoordina
socket string,
) (*gethtypes.Receipt, error) {
operatorAddr := crypto.PubkeyToAddress(operatorEcdsaPrivateKey.PublicKey)
w.logger.Info("registering operator with the AVS's registry coordinator", "avs-service-manager", w.serviceManagerAddr, "operator", operatorAddr, "quorumNumbers", quorumNumbers)
w.logger.Info("registering operator with the AVS's registry coordinator", "avs-service-manager", w.serviceManagerAddr, "operator", operatorAddr, "quorumNumbers", quorumNumbers, "socket", socket)
// params to register bls pubkey with bls apk registry
g1HashedMsgToSign, err := w.registryCoordinator.PubkeyRegistrationMessageHash(&bind.CallOpts{}, operatorAddr)
if err != nil {
Expand Down
14 changes: 11 additions & 3 deletions services/operatorsinfo/operatorsinfo_inmemory.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,9 +134,8 @@ func (ops *OperatorsInfoServiceInMemory) startServiceInGoroutine(ctx context.Con
"G1pubkey", ops.pubkeyDict[operatorAddr].G1Pubkey, "G2pubkey", ops.pubkeyDict[operatorAddr].G2Pubkey,
)
case newSocketRegistrationEvent := <-newSocketRegistrationC:
operatorId := newSocketRegistrationEvent.OperatorId
ops.socketDict[operatorId] = types.Socket(newSocketRegistrationEvent.Socket)
ops.logger.Debug("Received new socket registration event", "service", "OperatorPubkeysServiceInMemory", "operatorId", newSocketRegistrationEvent.OperatorId, "socket", newSocketRegistrationEvent.Socket)
ops.updateSocketMapping(newSocketRegistrationEvent.OperatorId, types.Socket(newSocketRegistrationEvent.Socket))
// Receive a query from GetOperatorPubkeys
case query := <-queryC:
pubkeys, ok := ops.pubkeyDict[query.operatorAddr]
Expand Down Expand Up @@ -167,14 +166,15 @@ func (ops *OperatorsInfoServiceInMemory) queryPastRegisteredOperatorEventsAndFil
ops.logger.Error("Fatal error querying existing registered operator sockets", "err", err, "service", "OperatorPubkeysServiceInMemory")
panic(err)
}
ops.logger.Debug("List of queried operator socket registration events", "socketsMap", socketsMap, "service", "OperatorPubkeysServiceInMemory")

// Fill the pubkeydict db with the operators and pubkeys found
for i, operatorAddr := range alreadyRegisteredOperatorAddrs {
operatorPubkeys := alreadyRegisteredOperatorPubkeys[i]
ops.pubkeyDict[operatorAddr] = operatorPubkeys
operatorId := types.OperatorIdFromG1Pubkey(operatorPubkeys.G1Pubkey)
ops.operatorAddrToId[operatorAddr] = operatorId
ops.socketDict[operatorId] = socketsMap[operatorId]
ops.updateSocketMapping(operatorId, socketsMap[operatorId])
}
}

Expand All @@ -189,3 +189,11 @@ func (ops *OperatorsInfoServiceInMemory) GetOperatorInfo(ctx context.Context, op
return resp.operatorInfo, resp.operatorExists
}
}

func (ops *OperatorsInfoServiceInMemory) updateSocketMapping(operatorId types.OperatorId, socket types.Socket) {
if socket == "" {
ops.logger.Warn("Received empty socket for operator", "operatorId", operatorId)
return
}
ops.socketDict[operatorId] = types.Socket(socket)
}
4 changes: 4 additions & 0 deletions types/operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@ func (o Operator) Validate() error {
return operatorMetadata.Validate()
}

// Socket represents the operator's socket address, which is registered onchain
// TODO: this could have multiple formats... do we really want to use a custom type for this?
// it could be ip:port, or just port, or ip:port:port if 2 ports are needed (like in eigenda's cast)
// or whatever an avs decides to use
type Socket string

type OperatorInfo struct {
Expand Down

0 comments on commit d8ca2a5

Please sign in to comment.