Releases: Layr-Labs/eigensdk-go
v1.0.0-rc.1 - mainnet slashing
What's Changed
- Changed foundry image used in the repo to
stable
tag in #633
Full Changelog: v1.0.0-rc.0...v1.0.0-rc.1
v1.0.0-rc.0 - mainnet slashing
What's Changed
- test: add integration rewards test by @maximopalopoli in #608
- fix: double send in open window for expired timer by @maximopalopoli in #616
Full Changelog: v0.3.0...v1.0.0-rc.0
v0.3.0 - Holesky testnet
What's Changed
This release includes bindings updates to the v1.4.0-testnet-holesky middleware release, with related functionality added to the chainio
module. It also adds mainnet compatibility by adding a set of bindings for M2 EigenLayer contracts, the DontUseAllocationManager
config option, and RegisterAsOperatorPreSlashing
method to elcontracts.ChainWriter
. Apart from that, we include some interface changes on the BlsAggregationService
, with a fix for aggregating signatures on multiple quorums.
Added 🎉
-
feat: new BLS aggregation service interface by @maximopalopoli in #578
-
The new interface implies starting the service before using it, interact with it using a handler and receiving the aggregated responses in a separate channel.
-
An example using the interface is:
// initialize service blsAgg := NewBlsAggregatorBuilder(fakeAvsRegistryService, hashFunction, logger) handler, aggResponsesC := blsAgg.Start() // Initialize task metadata := NewTaskMetadata(taskIndex, blockNum, quorumNumbers, quorumThresholdPercentages, tasksTimeToExpiry) err := handler.InitializeNewTask(metadata) // Process signature taskSignature := NewTaskSignature(taskIndex, taskResponse, blsSig, testOperator1.OperatorId) err = handler.ProcessNewSignature( context.Background(), taskSignature, ) // Receive responses aggregationServiceResponse := <-aggResponsesC
-
-
Added field
DontUseAllocationManager
to bindings configuration structs. Whentrue
, the bindings won't try to fetch theAllocationManager
address, which avoids errors on pre-slashing deployments (like the current mainnet one).- feat: make SDK compatible with mainnet contracts by @MegaRedHand in #464
- Added field
DontUseAllocationManager
toBuildAllConfig
by @MegaRedHand in #580 - fix: propagate
DontUseAllocationManager
flag between builders configs by @maximopalopoli in #581
-
feat: add missing contract addresses on
BuildAllConfig
by @MegaRedHand in #558 -
Added
AnvilC
field toclients.Clients
struct by @maximopalopoli in #585 -
Added
IsOperatorRegisteredWithAvs
,GetAVSRegistrar
methods to elcontracts chain reader and andSetAVSRegistrar
to chain writer by @maximopalopoli in #585-
An example for
IsOperatorRegisteredWithAvs
would be the following:// Given an operator registered to a M2 Quorum isOperator, err := clients.ElChainReader.IsOperatorRegisteredWithAvs(ctx, operatorAddress, avsAddress) assert.NoError(t, err) assert.Equal(t, isOperator, true) // Assuming is registered
-
An example for
GetAVSRegistrar
would be the following:avsRegistrar, err := clients.ElChainReader.GetAVSRegistrar(context.Background(), avsAddress) assert.NoError(t, err)
-
An example for
SetAVSRegistrar
would be the following:// Usually the AVSRegistrar is the registryCoordinator receipt, err := clients.ElChainWriter.SetAVSRegistrar(context.Background(), avsAddress, contractAddrs.RegistryCoordinator, true) require.NoError(t, err) require.Equal(t, gethtypes.ReceiptStatusSuccessful, receipt.Status)
-
-
Added
RegisterAsOperatorPreSlashing
to register an operator in M2 workflows by @maximopalopoli in #595-
A use example would be the following:
operator := types.M2Operator{ Address: fundedAccount, DelegationApproverAddress: "0xd5e099c71b797516c10ed0f0d895f429c2781142", StakerOptOutWindowBlocks: 100, MetadataUrl: "https://madhur-test-public.s3.us-east-2.amazonaws.com/metadata.json", } receipt, err := clients.ElChainWriter.RegisterAsOperatorPreSlashing(context.Background(), operator, true) assert.NoError(t, err) assert.True(t, receipt.Status == 1)
-
This PR also introduces the
M2Operator
type.
-
-
Added support for registering operators in operator sets with churn approval in #596
-
We added the fields
ChurnApprovalEcdsaPrivateKey
andOperatorKickParams
toelcontracts.RegistrationRequest
. Specifying the first one makes theChainWriter.RegisterForOperatorSets
function sign a churn approval for the operator registration, making the AVS eject operators specified by the other field to make space for the registering operator.request := elcontracts.RegistrationRequest{ // ...old fields are required... ChurnApprovalEcdsaPrivateKey: /* ECDSA key of the AVS churn approver */, OperatorKickParams: /* which operators to kick for each registering quorum */, } receipt, err := chainWriter.RegisterForOperatorSets( context.Background(), registryCoordinatorAddress, request, )
-
-
Introduces two new functions for
elcontracts.chainReader
from core contracts v1.3.0-rc.0 release by @maximopalopoli in #602-
IsOperatorSlashable
isSlashable, err := chainReader.IsOperatorSlashable( context.Background(), operatorAddress, operatorSet, ) require.NoError(t, err)
-
GetAllocatedStake
allocatedStakes, err = chainReader.GetAllocatedStake( context.Background(), operatorSet, operatorAddresses, strategyAddresses, ) require.NoError(t, err)
-
-
feat: added
StakeRegistryStorage
functions by @Sidu28 in #555 -
feat: added
BlsApkRegistryStorage
functions by @Sidu28 in #556 -
feat: added
AllocationManagerStorage
functions by @Sidu28 in #563 -
feat: added
DelegationManagerStorage
functions by @Sidu28 in #564 -
feat: added
ServiceManagerBase.getRestakeableStrategies
wrapper by @MegaRedHand in #559 -
feat: added
ServiceManagerBase.createOperatorDirectedAVSRewardsSubmission
wrapper by @MegaRedHand in #561 -
feat: added new method
registerOperatorWithChurn
by @damiramirez in #566 -
feat: added method
ModifyStrategyParams
by @damiramirez in #570 -
feat: added new method
AddStrategies
by @damiramirez in #568 -
feat: added
ServiceManagerBase.getOperatorRestakedStrategies
wrapper by @MegaRedHand in #560 -
feat: added method
RemoveStrategies
by @damiramirez in #569 -
feat: added
updateAVSMetadataURI
wrapper by @MegaRedHand in #553 -
feat: added
ServiceManagerBase.createAVSRewardsSubmission
wrapper by @MegaRedHand in #557 -
feat: Add
RewardsCoordinatorStorage
functions by @Sidu28 in #565
Changed
- Fixed BLS aggregation for multiple quorums by @TomasArrachea in #394
- fix: change PR url in Changelog workflow by @maximopalopoli in #575
- chore: use utils WrapError function instead of fmt's Errorf by @pablodeymo and @maximopalopoli in #579
Breaking Changes 🛠
-
refactor: encapsulate parameters into
TaskSignature
in #487-
Introduced
TaskSignature
struct to encapsulate parameters related to task signatures: -
Updated
ProcessNewSignature
to accept aTaskSignature
struct instead of multiple parameters.// BEFORE blsAggServ.ProcessNewSignature( context.Background(), taskIndex, taskResponse, blsSigOp1, testOperator1.OperatorId, ) // AFTER taskSignature := NewTaskSignature(taskIndex, taskResponse, blsSig, testOperator1.OperatorId) blsAggServ.ProcessNewSignature( context.Background(), taskSignature, )
-
-
refactor: update interface on
bls aggregation
in #485.-
Introduces a new struct
TaskMetadata
with a constructorNewTaskMetadata
to initialize a new task and a methodWithWindowDuration
to set the window duration. -
Refactors
InitializeNewTask
andsingleTaskAggregatorGoroutineFunc
to accept aTaskMetadata
struct instead of multiple parameters.// BEFORE blsAggServ := NewBlsAggregatorService(fakeAvsRegistryService, hashFunction, logger) blsAggServ.InitializeNewTask( taskIndex, blockNum, quorumNumbers, quorumThresholdPercentages, tasksTimeToExpiry, ) /...
-
v0.3.0-rc.1 - Slashing
What's Changed
Added 🎉
-
feat: new BLS aggregation service interface by @maximopalopoli in #578
-
The new interface implies starting the service before using it, interact with it using a handler and receiving the aggregated responses in a separate channel.
-
An example using the interface is:
// initialize service blsAgg := NewBlsAggregatorBuilder(fakeAvsRegistryService, hashFunction, logger) handler, aggResponsesC := blsAgg.Start() // Initialize task metadata := NewTaskMetadata(taskIndex, blockNum, quorumNumbers, quorumThresholdPercentages, tasksTimeToExpiry) err := handler.InitializeNewTask(metadata) // Process signature taskSignature := NewTaskSignature(taskIndex, taskResponse, blsSig, testOperator1.OperatorId) err = handler.ProcessNewSignature( context.Background(), taskSignature, ) // Receive responses aggregationServiceResponse := <-aggResponsesC
-
-
feat: added StakeRegistryStorage functions by @Sidu28 in #555
-
feat: add missing contract addresses on
BuildAllConfig
by @MegaRedHand in #558 -
feat: implement
updateAVSMetadataURI
wrapper by @MegaRedHand in #553 -
feat: add
ServiceManagerBase.createAVSRewardsSubmission
wrapper by @MegaRedHand in #557 -
feat: implement
ServiceManagerBase.getRestakeableStrategies
wrapper by @MegaRedHand in #559 -
feat: implement
ServiceManagerBase.createOperatorDirectedAVSRewardsSubmission
wrapper by @MegaRedHand in #561 -
feat: implement new method
registerOperatorWithChurn
by @damiramirez in #566 -
feat: implement method
ModifyStrategyParams
by @damiramirez in #570 -
feat: implement new method
AddStrategies
by @damiramirez in #568 -
feat: implement
ServiceManagerBase.getOperatorRestakedStrategies
wrapper by @MegaRedHand in #560 -
feate: implement method
RemoveStrategies
by @damiramirez in #569 -
feat: Add RewardsCoordinatorStorage functions by @Sidu28 in #565
Fixes
- Fixed BLS aggregation for multiple quorums by @TomasArrachea in #394
Breaking Changes 🛠
-
refactor: encapsulate parameters into
TaskSignature
in #487-
Introduced
TaskSignature
struct to encapsulate parameters related to task signatures: -
Updated
ProcessNewSignature
to accept aTaskSignature
struct instead of multiple parameters.// BEFORE blsAggServ.ProcessNewSignature( context.Background(), taskIndex, taskResponse, blsSigOp1, testOperator1.OperatorId, ) // AFTER taskSignature := NewTaskSignature(taskIndex, taskResponse, blsSig, testOperator1.OperatorId) blsAggServ.ProcessNewSignature( context.Background(), taskSignature, )
-
-
refactor: update interface on
bls aggregation
in #485.-
Introduces a new struct
TaskMetadata
with a constructorNewTaskMetadata
to initialize a new task and a methodWithWindowDuration
to set the window duration. -
Refactors
InitializeNewTask
andsingleTaskAggregatorGoroutineFunc
to accept aTaskMetadata
struct instead of multiple parameters.// BEFORE blsAggServ := NewBlsAggregatorService(fakeAvsRegistryService, hashFunction, logger) blsAggServ.InitializeNewTask( taskIndex, blockNum, quorumNumbers, quorumThresholdPercentages, tasksTimeToExpiry, ) // AFTER blsAggServ := NewBlsAggregatorService(fakeAvsRegistryService, hashFunction, logger) metadata := NewTaskMetadata(taskIndex, blockNum, quorumNumbers, quorumThresholdPercentages, tasksTimeToExpiry) blsAggServ.InitializeNewTask(metadata)
-
Removes
InitializeNewTaskWithWindow
sincewindowDuration
can now be set inTaskMetadata
.// BEFORE blsAggServ := NewBlsAggregatorService(fakeAvsRegistryService, hashFunction, logger) err = blsAggServ.InitializeNewTaskWithWindow( taskIndex, blockNum, quorumNumbers, quorumThresholdPercentages, timeToExpiry, windowDuration, ) // AFTER blsAggServ := NewBlsAggregatorService(fakeAvsRegistryService, hashFunction, logger) metadata := NewTaskMetadata( taskIndex, blockNum, quorumNumbers, quorumThresholdPercentages, tasksTimeToExpiry, ).WithWindowDuration(windowDuration) blsAggServ.InitializeNewTask(metadata)
-
Removed
- chore: remove duplicated function by @MegaRedHand in #426
Other Changes
- chore(deps): bump github.com/ethereum/go-ethereum from 1.14.0 to 1.15.0 by @dependabot in #543
- chore(deps): bump github.com/ethereum/go-ethereum from 1.14.0 to 1.14.13 in /signer by @dependabot in #490
- feat: make SDK compatible with mainnet contracts by @MegaRedHand in #464
- fix: respect context in new signature call by @MegaRedHand in #502
- chore(deps): bump github.com/urfave/cli/v2 from 2.27.1 to 2.27.5 by @dependabot in #431
- ci: add job to enforce updates to the changelog by @ricomateo in #483
- chore(deps): bump github.com/prometheus/client_golang from 1.19.0 to 1.20.5 by @dependabot in #432
- chore(deps): bump github.com/consensys/gnark-crypto from 0.14.0 to 0.16.0 by @dependabot in #573
- test:
avsregistry
add new tests cases for reader methods by @damiramirez in #458 - fix: change PR url in Changelog workflow by @maximopalopoli in #575
Full Changelog: v0.2.0...v0.3.0-rc.1
v0.2.0 - Rewards v2.1 testnet
Notable changes
-
Added functions related to the rewards v2.1 release:
-
ChainReader.GetOperatorSetSplit
inchainio/clients/elcontracts
operatorSplit, err = chainReader.GetOperatorSetSplit( context.Background(), operatorAddr, operatorSet, )
-
ChainWriter.SetOperatorSetSplit
inchainio/clients/elcontracts
receipt, err = chainWriter.SetOperatorSetSplit( context.Background(), operatorAddr, operatorSet, split, waitForReceipt, )
-
-
Removed deprecated functions:
NewAVSRegistryContractBindings
: useavsregistry.NewBindingsFromConfig
insteadBuildAvsRegistryChainReader
: useavsregistry.NewReaderFromConfig
insteadBuildAvsRegistryChainSubscriber
: useavsregistry.NewSubscriberFromConfig
insteadBuildAvsRegistryChainWriter
: useavsregistry.NewWriterFromConfig
insteadNewEigenlayerContractBindings
: useelcontracts.NewBindingsFromConfig
insteadBuildELChainReader
: useelcontracts.NewReaderFromConfig
instead
-
Removed
RegisterOperatorInQuorumWithAVSRegistryCoordinator
fromavsregistry.ChainWriter
.- Users should use
RegisterOperator
or interact with bindings directly.
- Users should use
-
Removed panics from some functions.
BuildReadClients
,BuildAll
,NewZapLoggerByConfig
, andAvsRegistryServiceChainCaller.GetOperatorsAvsStateAtBlock
return errors instead of panicking. TheOperatorsInfoServiceInMemory
no longer panics (errors are only logged). -
Added documentation to all functions in
chainio/clients/elcontracts
andchainio/clients/avsregistry
. -
Added some functions related to slashing. More incoming in a future release.
What's Changed
- Update go.mod by @anupsv in #411
- feat: slashing by @shrimalmadhur in #342
- fix: generate am from delegation manager by @shrimalmadhur in #425
- test:
elcontracts.ChainWriter
slashing functions by @ricomateo in #427 - test: add admin and appointees test for reader by @damiramirez in #430
- feat: bls signer abstraction by @shrimalmadhur in #403
- InstrumentedClient having rpcCallsCollector as mandatory by @pablodeymo in #378
- Remove outdated TODO by @TomasArrachea in #396
- test:
elcontracts.ChainWriter
claim functions (slashing) by @ricomateo in #436 - test: use read clients builder by @maximopalopoli in #441
- test: add reader test coverage by @maximopalopoli in #429
- fix: change literal string values for constants or predefined values by @maximopalopoli in #442
- test: add more chain reader coverage by @maximopalopoli in #443
- Remove deprecated functions by @pablodeymo in #367
- Compliance test for BLS signature by @pablodeymo in #402
- Avoid panics by @pablodeymo in #389
- Add exponential backoff retries to send transactions by @TomasArrachea in #392
- test and fix
ChainWriter.RegisterForOperatorSets
function by @pablodeymo in #416 - signer module removed, since it's deprecated by @pablodeymo in #366
- feat: add api key to cerberus client by @shrimalmadhur in #449
- feat: socket test by @gpsanant in #450
- test:
chainWriter
add edge case tests to improve coverage by @damiramirez in #451 - test:
chainReader
shares and operatorSets functions by @damiramirez in #437 - test: add test cases where contract returns an error by @maximopalopoli in #446
- test:
chainReader
invalid config tests by @damiramirez in #447 - fix: add attribute nil verifications in chainReader by @maximopalopoli in #448
- test: increase avsRegistry chainWriter coverage by @maximopalopoli in #457
- chore(deps): bump golang.org/x/crypto from 0.22.0 to 0.31.0 by @dependabot in #408
- chore(deps): bump golang.org/x/net from 0.26.0 to 0.33.0 in /signer by @dependabot in #439
- chore: format contracts by @ricomateo in #472
- chore: update bindings by @ricomateo in #476
- test: add invalid config chainWriter tests by @maximopalopoli in #454
- ci: add job to check the bindings are up to date by @ricomateo in #475
- ci: add job to check the contracts are formatted and can be compiled by @ricomateo in #471
- ci: add job to check if anvil state is up to date by @ricomateo in #480
- docs:
avsregistry/reader
by @ricomateo in #495 - docs:
avsregistry/writer
by @ricomateo in #496 - test:
avsregistry
add tests for subscriber by @damiramirez in #456 - docs:
elcontracts/writer
by @ricomateo in #498 - refactor:
elcontracts
error handling by @damiramirez in #463 - refactor: reduce redundancy in avsRegistry writer test by @maximopalopoli in #462
- test: add cancelled context tests for chainReader by @maximopalopoli in #455
- feat: add clear deallocation queue function by @maximopalopoli in #508
- feat: add set rewards initiator function by @maximopalopoli in #510
- feat: update middleware submodule to v1.0.3-testnet-slashing release by @MegaRedHand in #478
- feat: add is operator set quorum function by @maximopalopoli in #513
- feat: add set slashable stake lookahead function by @maximopalopoli in #512
- feat: add eject operator function by @maximopalopoli in #532
- feat: add create slashable stake quorum func by @maximopalopoli in #531
- feat: add create total delegated stake quorum function by @maximopalopoli in #529
- feat: integrate Rewards V2.1 by @Sidu28 in #534
- feat: add set churn approver function by @maximopalopoli in #538
- feat: add set operator set params function by @maximopalopoli in #539
- fix: don't use
example.com
in test by @MegaRedHand in #537 - feat: add set ejector function by @maximopalopoli in #540
- docs: add function documentation for
elcontracts/reader
andavsregistry/subscriber
by @MegaRedHand in #533 - refactor: Remove DeregisterOperatorOperatorSets function by @maximopalopoli in #459
- refactor: Remove deprecated function that registers an operator of avsRegistry writer by @maximopalopoli in #460
- test: improve test for is operator set quorum case by @maximopalopoli in #546
- feat: add set account identifier function by @maximopalopoli in #542
- feat: add set ejection cooldown function by @maximopalopoli in #545
- feat: implement
StakeRegistry
view functions by @Sidu28 in #536
New Contributors
- @anupsv made their first contribution in #411
- @damiramirez made their first contribution in #430
- @maximopalopoli made their first contribution in #441
- @MegaRedHand made their first contribution in #478
Full Changelog: v0.1.14...v0.2.0
v0.1.14
Notable Changes
- Rewards v2 methods for setting and getting operator/avs splits
- Rewards v2 methods for batch claiming
What's Changed
- chore: update to latest dev contracts by @gpabst in #397
- feat: add ProcessClaims convenience method for batch claiming by @gpabst in #399
- feat: methods to set and read operator avs split by @gpabst in #401
- feat: convenience methods to get/set operator PI split by @gpabst in #406
Full Changelog: v0.1.13...v0.1.14
[Holesky] v0.2.0-beta.1
What's Changed
- fix: generate am from delegation manager by @shrimalmadhur in #425
Full Changelog: v0.2.0-beta...v0.2.0-beta.1
[Holesky] v0.2.0-beta
Notable Changes
- Slashing and operator set upgrade
- Tracking eigenlayer middleware - https://github.com/Layr-Labs/eigenlayer-middleware/tree/feat/slashing-release-branch
- Tracking eigenlayer core - https://github.com/Layr-Labs/eigenlayer-contracts/releases/tag/v1.0.2
What's Changed
- chore: update to latest dev contracts by @gpabst in #397
- feat: add ProcessClaims convenience method for batch claiming by @gpabst in #399
- feat: methods to set and read operator avs split by @gpabst in #401
- feat: convenience methods to get/set operator PI split by @gpabst in #406
- Update go.mod by @anupsv in #411
- feat: slashing by @shrimalmadhur in #342
New Contributors
Full Changelog: v0.1.13...v0.2.0-beta
October mainnet
Contracts
This release points to
- EigenLayer Middleware - https://github.com/Layr-Labs/eigenlayer-middleware/releases/tag/v0.4.3-mainnet-rewards
- EigenLayer Core Contracts - https://github.com/Layr-Labs/eigenlayer-contracts/releases/tag/v0.4.3-mainnet-rewards-foundation-incentives
What's Changed
- chore(deps): bump github.com/docker/docker from 25.0.5+incompatible to 25.0.6+incompatible by @dependabot in #346
- add fn for get claimed rewards by @shrimalmadhur in #357
- ci: add merge group to CI by @shrimalmadhur in #370
- Avoid panic in ReadStringFromSecretManager in secretmanager.go by @pablodeymo in #344
- Remove unused code in utils.go by @pablodeymo in #347
- add timeout to metrics server by @shrimalmadhur in #368
- Add compliance tests by @pablodeymo in #339
- Chaging data types to avoid dangerous conversions by @pablodeymo in #348
- Change rand library for a a cryptographically secure random number generator one by @pablodeymo in #349
- Cleaning file path before using it by @pablodeymo in #353
- Remove panic in BuildAll by @pablodeymo in #354
- Change the way exec.Command is called to sanitize parameters by @pablodeymo in #356
- Documentation in NewBlsAggregatorService by @pablodeymo in #358
- Add AvsRegistry tests by @TomasArrachea in #360
- Reduce permissions for file created according to CWE-276 by @pablodeymo in #355
- Add ElContracts Reader tests by @TomasArrachea in #369
- Change the usage of the element in for loop to avoid memory aliasing by @pablodeymo in #352
- Add Egnkey tests by @TomasArrachea in #377
- Add Signer tests by @TomasArrachea in #373
- Remove ReadFile util by @TomasArrachea in #376
- Get operator stake in quorums of operator at current block race condition by @pablodeymo in #371
- chore: clean up elcontracts to take context by @shrimalmadhur in #383
- Add Instrumented Client tests by @pablodeymo in #372
- Add ElContracts Writer tests by @pablodeymo in #361
- Add BLS Aggregation window waiting after quorum by @TomasArrachea in #386
- chore: remove unused methods by @gpabst in #387
- Update to mainnet rewards v0.4.3 by @pablodeymo in #407
New Contributors
- @pablodeymo made their first contribution in #344
Full Changelog: v0.1.12...v0.1.12-mainnet
v0.1.13
What's Changed
- chore(deps): bump github.com/docker/docker from 25.0.5+incompatible to 25.0.6+incompatible by @dependabot in #346
- add fn for get claimed rewards by @shrimalmadhur in #357
- ci: add merge group to CI by @shrimalmadhur in #370
- Avoid panic in ReadStringFromSecretManager in secretmanager.go by @pablodeymo in #344
- Remove unused code in utils.go by @pablodeymo in #347
- add timeout to metrics server by @shrimalmadhur in #368
- Add compliance tests by @pablodeymo in #339
- Chaging data types to avoid dangerous conversions by @pablodeymo in #348
- Change rand library for a a cryptographically secure random number generator one by @pablodeymo in #349
- Cleaning file path before using it by @pablodeymo in #353
- Remove panic in BuildAll by @pablodeymo in #354
- Change the way exec.Command is called to sanitize parameters by @pablodeymo in #356
- Documentation in NewBlsAggregatorService by @pablodeymo in #358
- Add AvsRegistry tests by @TomasArrachea in #360
- Reduce permissions for file created according to CWE-276 by @pablodeymo in #355
- Add ElContracts Reader tests by @TomasArrachea in #369
- Change the usage of the element in for loop to avoid memory aliasing by @pablodeymo in #352
- Add Egnkey tests by @TomasArrachea in #377
- Add Signer tests by @TomasArrachea in #373
- Remove ReadFile util by @TomasArrachea in #376
- Get operator stake in quorums of operator at current block race condition by @pablodeymo in #371
- chore: clean up elcontracts to take context by @shrimalmadhur in #383
- Add Instrumented Client tests by @pablodeymo in #372
- Add ElContracts Writer tests by @pablodeymo in #361
- Add BLS Aggregation window waiting after quorum by @TomasArrachea in #386
New Contributors
- @pablodeymo made their first contribution in #344
Full Changelog: v0.1.12...v0.1.13