From ec87832062c97a7525776e4fbecce5679de3f324 Mon Sep 17 00:00:00 2001 From: Jian Xiao Date: Fri, 19 Jul 2024 22:18:33 +0000 Subject: [PATCH 1/7] Adjust the churn approval interval --- operators/churner/churner.go | 21 +++++++++++---------- operators/churner/config.go | 2 ++ operators/churner/flags/flags.go | 8 ++++++++ 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/operators/churner/churner.go b/operators/churner/churner.go index c83e39370..190579975 100644 --- a/operators/churner/churner.go +++ b/operators/churner/churner.go @@ -20,8 +20,7 @@ import ( ) var ( - bipMultiplier = big.NewInt(10000) - secondsTillExpiry = 3600 * time.Second + bipMultiplier = big.NewInt(10000) ) type ChurnRequest struct { @@ -50,9 +49,10 @@ type churner struct { Transactor core.Transactor QuorumCount uint8 - privateKey *ecdsa.PrivateKey - logger logging.Logger - metrics *Metrics + privateKey *ecdsa.PrivateKey + logger logging.Logger + metrics *Metrics + churnApprovalInterval time.Duration } func NewChurner( @@ -72,9 +72,10 @@ func NewChurner( Transactor: transactor, QuorumCount: 0, - privateKey: privateKey, - logger: logger.With("component", "Churner"), - metrics: metrics, + privateKey: privateKey, + logger: logger.With("component", "Churner"), + metrics: metrics, + churnApprovalInterval: config.ChurnApprovalInterval, }, nil } @@ -285,8 +286,8 @@ func (c *churner) sign(ctx context.Context, operatorToRegisterAddress gethcommon var salt [32]byte copy(salt[:], saltKeccak256) - // set expiry to 3600s in the future - expiry := big.NewInt(now.Add(secondsTillExpiry).Unix()) + // set expiry to ChurnApprovalInterval (15mins by default) in the future + expiry := big.NewInt(now.Add(c.churnApprovalInterval).Unix()) // sign and return signature hashToSign, err := c.Transactor.CalculateOperatorChurnApprovalDigestHash(ctx, operatorToRegisterAddress, operatorToRegisterId, operatorsToChurn, salt, expiry) diff --git a/operators/churner/config.go b/operators/churner/config.go index ae7832c6d..d35a72121 100644 --- a/operators/churner/config.go +++ b/operators/churner/config.go @@ -20,6 +20,7 @@ type Config struct { EigenDAServiceManagerAddr string PerPublicKeyRateLimit time.Duration + ChurnApprovalInterval time.Duration } func NewConfig(ctx *cli.Context) (*Config, error) { @@ -34,6 +35,7 @@ func NewConfig(ctx *cli.Context) (*Config, error) { BLSOperatorStateRetrieverAddr: ctx.GlobalString(flags.BlsOperatorStateRetrieverFlag.Name), EigenDAServiceManagerAddr: ctx.GlobalString(flags.EigenDAServiceManagerFlag.Name), PerPublicKeyRateLimit: ctx.GlobalDuration(flags.PerPublicKeyRateLimit.Name), + ChurnApprovalInterval: ctx.GlobalDuration(flags.ChurnApprovalInterval.Name), MetricsConfig: MetricsConfig{ HTTPPort: ctx.GlobalString(flags.MetricsHTTPPort.Name), EnableMetrics: ctx.GlobalBool(flags.EnableMetrics.Name), diff --git a/operators/churner/flags/flags.go b/operators/churner/flags/flags.go index e3c8ac89d..906096c49 100644 --- a/operators/churner/flags/flags.go +++ b/operators/churner/flags/flags.go @@ -65,6 +65,13 @@ var ( Value: "9100", EnvVar: common.PrefixEnvVar(envPrefix, "METRICS_HTTP_PORT"), } + ChurnApprovalInterval = cli.DurationFlag{ + Name: common.PrefixFlag(FlagPrefix, "churn-approval-interval"), + Usage: "If this interval is N mins, the churner will only approve a new churn request N mins after the previous approval", + Required: false, + EnvVar: common.PrefixEnvVar(envPrefix, "CHURN_APPROVAL_INTERVAL"), + Value: 15 * time.Minute, + } ) var requiredFlags = []cli.Flag{ @@ -78,6 +85,7 @@ var requiredFlags = []cli.Flag{ var optionalFlags = []cli.Flag{ PerPublicKeyRateLimit, MetricsHTTPPort, + ChurnApprovalInterval, } // Flags contains the list of configuration options available to the binary. From 5e91166ad61a13b151e59935aa89f262f50b08b2 Mon Sep 17 00:00:00 2001 From: Jian Xiao Date: Wed, 7 Aug 2024 18:37:18 +0000 Subject: [PATCH 2/7] fix --- operators/churner/server_test.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/operators/churner/server_test.go b/operators/churner/server_test.go index 00fb2ad85..a6261b576 100644 --- a/operators/churner/server_test.go +++ b/operators/churner/server_test.go @@ -6,6 +6,7 @@ import ( "log" "math/big" "testing" + "time" "github.com/Layr-Labs/eigenda/common" "github.com/Layr-Labs/eigenda/common/geth" @@ -92,7 +93,7 @@ func TestChurn(t *testing.T) { // retry prior to expiry should fail _, err = s.Churn(ctx, request) assert.NotNil(t, err) - assert.Equal(t, err.Error(), "rpc error: code = ResourceExhausted desc = previous approval not expired, retry in 3600 seconds") + assert.Equal(t, err.Error(), "rpc error: code = ResourceExhausted desc = previous approval not expired, retry in 900 seconds") } func TestChurnWithInvalidQuorum(t *testing.T) { @@ -169,6 +170,7 @@ func newTestServer(t *testing.T) *churner.Server { PrivateKeyString: churnerPrivateKeyHex, NumRetries: numRetries, }, + ChurnApprovalInterval: 15 * time.Minute, } var err error From 286c91403030d1063562a0ca4a58000351b24406 Mon Sep 17 00:00:00 2001 From: Jian Xiao Date: Wed, 7 Aug 2024 20:10:36 +0000 Subject: [PATCH 3/7] test --- operators/churner/flags/flags.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/operators/churner/flags/flags.go b/operators/churner/flags/flags.go index 906096c49..fed04af64 100644 --- a/operators/churner/flags/flags.go +++ b/operators/churner/flags/flags.go @@ -70,7 +70,7 @@ var ( Usage: "If this interval is N mins, the churner will only approve a new churn request N mins after the previous approval", Required: false, EnvVar: common.PrefixEnvVar(envPrefix, "CHURN_APPROVAL_INTERVAL"), - Value: 15 * time.Minute, + Value: 60 * time.Minute, } ) From 2e13074bbe8e73401c1fcf07dcd8fdfe42ff5487 Mon Sep 17 00:00:00 2001 From: Jian Xiao Date: Wed, 7 Aug 2024 20:27:11 +0000 Subject: [PATCH 4/7] fix --- inabox/deploy/config.go | 5 +++-- inabox/deploy/env_vars.go | 2 ++ operators/churner/flags/flags.go | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/inabox/deploy/config.go b/inabox/deploy/config.go index c73f4794d..01795d65f 100644 --- a/inabox/deploy/config.go +++ b/inabox/deploy/config.go @@ -146,8 +146,9 @@ func (env *Config) generateChurnerVars(ind int, graphUrl, logPath, grpcPort stri CHURNER_GRAPH_URL: graphUrl, CHURNER_INDEXER_PULL_INTERVAL: "1s", - CHURNER_ENABLE_METRICS: "true", - CHURNER_METRICS_HTTP_PORT: "9095", + CHURNER_ENABLE_METRICS: "true", + CHURNER_METRICS_HTTP_PORT: "9095", + CHURNER_CHURN_APPROVAL_INTERVAL: "900s", } env.applyDefaults(&v, "CHURNER", "churner", ind) diff --git a/inabox/deploy/env_vars.go b/inabox/deploy/env_vars.go index 6b73ebc6b..f701ce64d 100644 --- a/inabox/deploy/env_vars.go +++ b/inabox/deploy/env_vars.go @@ -424,6 +424,8 @@ type ChurnerVars struct { CHURNER_PER_PUBLIC_KEY_RATE_LIMIT string + CHURNER_CHURN_APPROVAL_INTERVAL string + CHURNER_METRICS_HTTP_PORT string CHURNER_CHAIN_RPC string diff --git a/operators/churner/flags/flags.go b/operators/churner/flags/flags.go index fed04af64..906096c49 100644 --- a/operators/churner/flags/flags.go +++ b/operators/churner/flags/flags.go @@ -70,7 +70,7 @@ var ( Usage: "If this interval is N mins, the churner will only approve a new churn request N mins after the previous approval", Required: false, EnvVar: common.PrefixEnvVar(envPrefix, "CHURN_APPROVAL_INTERVAL"), - Value: 60 * time.Minute, + Value: 15 * time.Minute, } ) From b4258d00c6430dfee4df54ee9d7846137c9380ac Mon Sep 17 00:00:00 2001 From: Jian Xiao Date: Wed, 7 Aug 2024 20:36:19 +0000 Subject: [PATCH 5/7] fix --- operators/churner/churner.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/operators/churner/churner.go b/operators/churner/churner.go index 190579975..b18a3e233 100644 --- a/operators/churner/churner.go +++ b/operators/churner/churner.go @@ -67,6 +67,8 @@ func NewChurner( return nil, err } + logger.Info("Churner created with config", "ChurnApprovalInterval", config.ChurnApprovalInterval) + return &churner{ Indexer: indexer, Transactor: transactor, From bdb17f707201c76712513890d112361bb0fa141f Mon Sep 17 00:00:00 2001 From: Jian Xiao Date: Wed, 7 Aug 2024 21:03:18 +0000 Subject: [PATCH 6/7] fix --- operators/churner/churner.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/operators/churner/churner.go b/operators/churner/churner.go index b18a3e233..9ac4b2fb3 100644 --- a/operators/churner/churner.go +++ b/operators/churner/churner.go @@ -20,7 +20,8 @@ import ( ) var ( - bipMultiplier = big.NewInt(10000) + bipMultiplier = big.NewInt(10000) + secondsTillExpiry = 900 * time.Second ) type ChurnRequest struct { @@ -288,8 +289,8 @@ func (c *churner) sign(ctx context.Context, operatorToRegisterAddress gethcommon var salt [32]byte copy(salt[:], saltKeccak256) - // set expiry to ChurnApprovalInterval (15mins by default) in the future - expiry := big.NewInt(now.Add(c.churnApprovalInterval).Unix()) + // set expiry to ChurnApprovalInterval in the future + expiry := big.NewInt(now.Add(secondsTillExpiry).Unix()) // sign and return signature hashToSign, err := c.Transactor.CalculateOperatorChurnApprovalDigestHash(ctx, operatorToRegisterAddress, operatorToRegisterId, operatorsToChurn, salt, expiry) From c1668e2e873911ec19cdbc907e403f209edd79dc Mon Sep 17 00:00:00 2001 From: Jian Xiao Date: Wed, 7 Aug 2024 21:08:57 +0000 Subject: [PATCH 7/7] fix --- operators/churner/churner.go | 5 ++--- operators/churner/tests/churner_test.go | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/operators/churner/churner.go b/operators/churner/churner.go index 9ac4b2fb3..dd857fbba 100644 --- a/operators/churner/churner.go +++ b/operators/churner/churner.go @@ -20,8 +20,7 @@ import ( ) var ( - bipMultiplier = big.NewInt(10000) - secondsTillExpiry = 900 * time.Second + bipMultiplier = big.NewInt(10000) ) type ChurnRequest struct { @@ -290,7 +289,7 @@ func (c *churner) sign(ctx context.Context, operatorToRegisterAddress gethcommon copy(salt[:], saltKeccak256) // set expiry to ChurnApprovalInterval in the future - expiry := big.NewInt(now.Add(secondsTillExpiry).Unix()) + expiry := big.NewInt(now.Add(c.churnApprovalInterval).Unix()) // sign and return signature hashToSign, err := c.Transactor.CalculateOperatorChurnApprovalDigestHash(ctx, operatorToRegisterAddress, operatorToRegisterId, operatorsToChurn, salt, expiry) diff --git a/operators/churner/tests/churner_test.go b/operators/churner/tests/churner_test.go index 0f5486b95..af013fe62 100644 --- a/operators/churner/tests/churner_test.go +++ b/operators/churner/tests/churner_test.go @@ -214,6 +214,7 @@ func newTestServer(t *testing.T) *churner.Server { LoggerConfig: common.DefaultLoggerConfig(), BLSOperatorStateRetrieverAddr: testConfig.EigenDA.OperatorStateRetreiver, EigenDAServiceManagerAddr: testConfig.EigenDA.ServiceManager, + ChurnApprovalInterval: 15 * time.Minute, } operatorTransactorChurner, err := createTransactorFromScratch(