Skip to content

Commit 7e896b1

Browse files
committed
add retry logic
1 parent 62f1fff commit 7e896b1

File tree

3 files changed

+70
-2
lines changed

3 files changed

+70
-2
lines changed

core/chainio/retryable.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,3 +287,22 @@ func SubscribeToNewTasksV3Retryable(
287287
) (event.Subscription, error) {
288288
return retry.RetryWithData(SubscribeToNewTasksV3(opts, serviceManager, newTaskCreatedChan, batchMerkleRoot), retry.DefaultRetryConfig())
289289
}
290+
291+
// |---AVS Reader---|
292+
293+
func DisabledVerifiers(r *AvsReader, opts *bind.CallOpts) func() (*big.Int, error) {
294+
disabled_ver_func := func() (*big.Int, error) {
295+
return r.AvsContractBindings.ServiceManager.ContractAlignedLayerServiceManagerCaller.DisabledVerifiers(opts)
296+
}
297+
return disabled_ver_func
298+
}
299+
300+
/*
301+
Retrieves the Verifiers Blacklist Bitmap from the `AlignedServiceManager` Contract.
302+
- All errors are considered Transient Errors
303+
- Retry times (3 retries): 12 sec (1 Blocks), 24 sec (2 Blocks), 48 sec (4 Blocks)
304+
- NOTE: Contract call reverts are not considered `PermanentError`'s as block reorg's may lead to contract call revert in which case the aggregator should retry.
305+
*/
306+
func (r *AvsReader) DisabledVerifiersRetryable(opts *bind.CallOpts) (*big.Int, error) {
307+
return retry.RetryWithData(DisabledVerifiers(r, opts), retry.ChainRetryConfig())
308+
}

core/retry_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -923,3 +923,51 @@ func TestBatchersBalances(t *testing.T) {
923923
return
924924
}
925925
}
926+
927+
func TestDisabledVerifiers(t *testing.T) {
928+
cmd, _, err := SetupAnvil(8545)
929+
if err != nil {
930+
t.Errorf("Error setting up Anvil: %s\n", err)
931+
}
932+
933+
aggregatorConfig := config.NewAggregatorConfig("../config-files/config-aggregator-test.yaml")
934+
avsReader, err := chainio.NewAvsReaderFromConfig(aggregatorConfig.BaseConfig, aggregatorConfig.EcdsaConfig)
935+
if err != nil {
936+
log.Fatalf("Could not create AVS reader")
937+
}
938+
939+
dis_ver_func := chainio.DisabledVerifiers(avsReader, &bind.CallOpts{})
940+
_, err = dis_ver_func()
941+
assert.Nil(t, err)
942+
943+
if err := cmd.Process.Kill(); err != nil {
944+
t.Errorf("Error killing process: %v\n", err)
945+
return
946+
}
947+
948+
dis_ver_func = chainio.DisabledVerifiers(avsReader, &bind.CallOpts{})
949+
_, err = dis_ver_func()
950+
assert.NotNil(t, err)
951+
if _, ok := err.(retry.PermanentError); ok {
952+
t.Errorf("DisabledVerifiers Emitted non-Transient error: %s\n", err)
953+
return
954+
}
955+
if !strings.Contains(err.Error(), "connection reset") {
956+
t.Errorf(" did not return expected error: %s\n", err)
957+
return
958+
}
959+
960+
cmd, _, err = SetupAnvil(8545)
961+
if err != nil {
962+
t.Errorf("Error setting up Anvil: %s\n", err)
963+
}
964+
965+
dis_ver_func = chainio.DisabledVerifiers(avsReader, &bind.CallOpts{})
966+
_, err = dis_ver_func()
967+
assert.Nil(t, err)
968+
969+
if err := cmd.Process.Kill(); err != nil {
970+
t.Errorf("Error killing process: %v\n", err)
971+
return
972+
}
973+
}

operator/pkg/operator.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"sync"
1616
"time"
1717

18+
"github.com/ethereum/go-ethereum/accounts/abi/bind"
1819
"github.com/ethereum/go-ethereum/crypto"
1920
"github.com/urfave/cli/v2"
2021
"github.com/yetanotherco/aligned_layer/operator/risc_zero"
@@ -372,7 +373,7 @@ func (o *Operator) ProcessNewBatchLogV2(newBatchLog *servicemanager.ContractAlig
372373
var wg sync.WaitGroup
373374
wg.Add(verificationDataBatchLen)
374375

375-
disabledVerifiersBitmap, err := o.avsReader.DisabledVerifiers()
376+
disabledVerifiersBitmap, err := o.avsReader.DisabledVerifiersRetryable(&bind.CallOpts{})
376377
if err != nil {
377378
o.Logger.Errorf("Could not check verifiers status: %s", err)
378379
results <- false
@@ -452,7 +453,7 @@ func (o *Operator) ProcessNewBatchLogV3(newBatchLog *servicemanager.ContractAlig
452453
results := make(chan bool, verificationDataBatchLen)
453454
var wg sync.WaitGroup
454455
wg.Add(verificationDataBatchLen)
455-
disabledVerifiersBitmap, err := o.avsReader.DisabledVerifiers()
456+
disabledVerifiersBitmap, err := o.avsReader.DisabledVerifiersRetryable(&bind.CallOpts{})
456457
if err != nil {
457458
o.Logger.Errorf("Could not check verifiers status: %s", err)
458459
results <- false

0 commit comments

Comments
 (0)