Releases: Layr-Labs/eigensdk-rs
v1.0.0-rc.0 - mainnet slashing
What's Changed
Added 🎉
-
Bump alloy to 0.13 and MSRV to 1.81 in PR 419.
-
Added an additional implementation for
OperatorInfoService
for retrieving operator BLS pubkeys and sockets directly from middleware in #414. The newOperatorInfoOnChain
is more stable and efficient since it doesn't subscribe or fetch events, but it requires functionality from the recent v1.3.0 middleware release.Old Implementation which indexes middleware events:
use eigen_services_operatorsinfo::{operatorsinfo_inmemory::OperatorInfoServiceInMemory}; let operators_info = OperatorInfoServiceInMemory::new( get_test_logger(), avs_registry_reader.clone(), ws_endpoint, ) .await .unwrap() .0; let cancellation_token = CancellationToken::new(); let operators_info_clone = operators_info.clone(); let token_clone = cancellation_token.clone(); task::spawn(async move { operators_info_clone.start_service(&token_clone, start_block, end_block).await }); // Sleep to wait for the operator info service to start sleep(Duration::from_secs(1)).await; let avs_registry_service = AvsRegistryServiceChainCaller::new(avs_registry_reader.clone(), operators_info);
New alternate implementation which directly queries from middleware using view call:
use eigen_services_operatorsinfo::{operatorsinfo_inmemory::OperatorInfoOnChain}; let operators_info_on_chain = OperatorInfoOnChain::new( &http_endpoint, bls_apk_registry_address, socket_registry_address, ); let avs_registry_service = AvsRegistryServiceChainCaller::new( avs_registry_reader.clone(), operators_info_on_chain, ); let pub_keys = operator_info_on_chain .get_operator_info(OPERATOR_ADDRESS) .await .unwrap(); let socket = operator_info_on_chain .get_operator_socket(OPERATOR_ADDRESS) .await .unwrap();
Breaking Changes 🛠
-
Changing NodeApi to allow concurrent modifications of the internal state of the node in PR 401.
Before:
NodeApi
had the functioncreate_server
to start the Node API. Now, there are two functionsNodeApi::new
andNodeApi::start_server
to create the server and then start it.Also, users can now call functions to modify the information served dynamically by interacting with the
NodeApi
methods. As an end-to-end example:let mut node_info = NodeInfo::new("test_node", "v1.0.0"); node_info.register_service( "test_service", "Test Service", "Test service description", ServiceStatus::Up, ); // Set up a server running on a test address (e.g., 127.0.0.1:8081) let ip_port_addr = "127.0.0.1:8081"; let mut node_api = NodeApi::new(node_info); let server = node_api.start_server(ip_port_addr).unwrap(); // and then you can dinamically modify the state of the node: node_api .update_service_status("test_service", ServiceStatus::Down) .unwrap();
Documentation 📚
-
Added documentation for service crates:
- docs: avs registry service by @damiramirez in #409
- docs: operator info service by @damiramirez in #406
- docs: BLS Aggregator Service by @damiramirez in #387
-
Improved documentation compiling on docs.rs
- chore: apply cargo doc metadata to crates by @damiramirez in #441
- docs: fix doc warnings by @MegaRedHand in #438
- docs: inline
eigensdk
documentation by @MegaRedHand in #439
Other Changes
-
Moved test utils from chainio folder to testing/testutils folder by @maximopalopoli in #407
-
Added rewards utilities integration test by @maximopalopoli in #404
-
test: check quorum creation after service initialization is working by @MegaRedHand in #400
-
chore: use common testing utils in bls_agg_test in PR #420.
-
chore: remove unused dependency in
eigen-cli
by @MegaRedHand in #421 -
test: wait for transaction before doing call by @MegaRedHand in #422
-
chore: merge changes from main branch by @MegaRedHand in #446
-
Fixed release workflow. We now use release-plz for releases.
- ci: add workflow_dispatch for release-plz by @MegaRedHand in #448
- fix: ignore integration tests crate when publishing by @MegaRedHand in #449
- fix: use path-only dependency for testing utils by @MegaRedHand in #450
Full Changelog: v0.5.0...v1.0.0-rc.0
v0.5.0-testnet-holesky
What's Changed
Added 🎉
-
Added all features of the
eigensdk
crate to its"full"
feature #370- This includes:
"types"
,"utils"
,"metrics-collectors-economic"
, and"metrics-collectors-rpc-calls"
features.
- This includes:
-
Bump alloy to 0.12 in #381.
-
Added
register_for_operator_sets_with_churn
method toelcontracts/writer
in #382.let el_chain_writer_2 = new_test_writer(http_endpoint.clone(), SECOND_PRIVATE_KEY.to_string()).await; let bls_key_pair = BlsKeyPair::new(OPERATOR_BLS_KEY_2.to_string()).unwrap(); let churn_private_key = FIRST_PRIVATE_KEY.to_string(); let churn_sig_salt = FixedBytes::from([0x05; 32]); let churn_sig_expiry = U256::MAX; let tx_hash = el_chain_writer_2 .register_for_operator_sets_with_churn( SECOND_ADDRESS, // Operator address to register bls_key_pair, // Operator's BLS key pair avs_address, // AVS address vec![operator_set_id], // Operator set ID "socket".to_string(), // Socket address Bytes::from([0]), // Quorum numbers vec![FIRST_ADDRESS], // Operators to kick if quorum is full churn_private_key, // Churn approver's private key churn_sig_salt, // Churn signature salt churn_sig_expiry, // Churn signature expiry ) .await .unwrap();
Breaking Changes 🛠
-
Renamed
set_account_identifier
toset_avs
#365- The underlying call was renamed in the v1.1.1 eigenlayer-middleware release.
-
Changed the signature of
build_avs_registry_chain_writer
in #384.- The
operator_state_retriever_addr
parameter was replaced byservice_manager_addr
. - This change was made because later middleware versions do not include
ServiceManager
.
// Before pub async fn build_avs_registry_chain_writer( logger: SharedLogger, provider: String, signer: String, registry_coordinator_addr: Address, _operator_state_retriever_addr: Address, ) -> Result<Self, AvsRegistryError> {} // After pub async fn build_avs_registry_chain_writer( logger: SharedLogger, provider: String, signer: String, registry_coordinator_addr: Address, service_manager_addr: Address, ) -> Result<Self, AvsRegistryError> {}
- The
-
Bump middleware to v1.4.0-testnet-holesky in [#396] , [#365], [#395] and [#388].
- Added method
is_operator_slashable
.
- Added method
let chain_reader = build_el_chain_reader(http_endpoint.clone()).await;
let operator_set = OperatorSet {
id: 1,
avs: Address::ZERO,
};
let is_slashable = chain_reader
.is_operator_slashable(OPERATOR_ADDRESS, operator_set)
.await
.unwrap();
assert!(!is_slashable);
- Added method
get_allocated_stake
.
let chain_reader = build_el_chain_reader(http_endpoint.clone()).await;
let operator_set = OperatorSet {
id: 1,
avs: Address::ZERO,
};
let operators = vec![OPERATOR_ADDRESS];
let strategies = vec![get_erc20_mock_strategy(http_endpoint.to_string()).await];
let slashable_stake = chain_reader
.get_allocated_stake(operator_set, operators, strategies)
.await
.unwrap();
- Added method
get_encumbered_magnitude
.
let chain_reader = build_el_chain_reader(http_endpoint.clone()).await;
let magnitude = chain_reader
.get_encumbered_magnitude(
OPERATOR_ADDRESS,
get_erc20_mock_strategy(http_endpoint.to_string()).await,
)
.await
.unwrap();
- Updated error types in
BlsAggregationServiceError
for channel failures in the BLS Aggregator Service (#392).- Before: A generic
ChannelError
was used for both sender and receiver channel failures. - After: Distinct errors are now provided:
SenderError
is returned when the sender channel fails to send a message to the service.ReceiverError
is returned when the receiver channel fails to receive a message from the service.
- Before: A generic
Removed 🗑
- Removed unused empty structs from the library in #371
eigen_client_eth::client::Client
eigen_services_operatorsinfo::OperatorPubKeysService
- Removed the
AvsRegistryChainReader::is_operator_set_quorum
method #365- This function was removed in the v1.1.1 eigenlayer-middleware release.
Documentation 📚
- Reflect 2 bindings(rewardsv2 and slashing) in readme in #383.
Other Changes
- docs: remove foundry docker platform error mention mention by @MegaRedHand in #374
- test: add missing test for query_existing_registered_operator_pub_keys by @damiramirez in #377
- refactor: use
SlashingRegistryCoordinator
inMockAvsDeploymentLib.sol
by @damiramirez in #384 - test: add test for deregister_from_operator_sets by @damiramirez in #386
- docs: rewrite
bls_agg
refactor entry in changelog by @MegaRedHand in #389 - chore: release 0.5.0 by @supernovahs in #397
New Contributors
- @Serial-ATA made their first contribution in #381
Full Changelog: v0.4.0-rc.1...v0.5.0
v0.4.0-rc.1 - Slashing
⚠️ Important
Previously, we maintained one state across the SDK, with this release we now maintain two bindings:-
RewardsV2
- Current mainnet release.Slashing
- Middleware's dev branch latest commit.
Previously we use to import this way
use eigen_utils::middleware::*;
Newer way to import bindings
use eigen_utils::rewardsv2::middleware::*;
use eigen_utils::slashing::middleware::*;
What's Changed
Added 🎉
-
Implemented
create_avs_rewards_submission
#345let rewards_submissions = vec![RewardsSubmission { strategiesAndMultipliers: strategies_and_multipliers, token, amount: U256::from(1_000), startTimestamp: last_valid_interval_start, duration: rewards_duration, }]; let tx_hash = avs_writer .create_avs_rewards_submission(rewards_submissions) .await .unwrap();
-
Added new method
update_avs_metadata_uri
inavsregistry/writer
in #344.let tx_hash = avs_writer .update_avs_metadata_uri(new_metadata) .await .unwrap();
-
Added new method
register_operator_with_churn
inavsregistry/writer
in #354.let bls_key_pair = BlsKeyPair::new(BLS_KEY).unwrap(); let operator_sig_salt = FixedBytes::from([0x02; 32]); let operator_sig_expiry = U256::MAX; let quorum_nums = Bytes::from([0]); let socket = "socket".to_string(); let churn_sig_salt = FixedBytes::from([0x05; 32]); let churn_sig_expiry = U256::MAX; let tx_hash = avs_writer_2 .register_operator_with_churn( bls_key_pair, // Operator's BLS key pair operator_sig_salt, // Operator signature salt operator_sig_expiry, // Operator signature expiry quorum_nums, // Quorum numbers for registration socket, // Socket address vec![REGISTERED_OPERATOR], // Operators to kick if quorum is full CHURN_PRIVATE_KEY, // Churn approver's private key churn_sig_salt, // Churn signature salt churn_sig_expiry, // Churn signature expiry ) .await .unwrap();
-
Added new method
set_churn_approver
inavsregistry/writer
in #333.let tx_hash = avs_writer .set_churn_approver(new_churn_approver_address) .await .unwrap();
-
Added new method
set_signer
inELChainWriter
andAvsRegistryChainWriter
in #364.avs_registry_chain_writer.set_signer(PRIVATE_KEY_STRING); el_chain_writer.set_signer(PRIVATE_KEY_STRING);
-
Added additional method
register_as_operator_preslashing
inELChainWriter
in #366. This method is to be used for pre-slashing operator registration.let operator = Operator { address: ADDRESS, delegation_approver_address: ADDRESS, metadata_url: "metadata_uri".to_string(), allocation_delay: None, _deprecated_earnings_receiver_address: None, staker_opt_out_window_blocks: Some(0u32), }; el_chain_writer .register_as_operator_preslashing(operator) .await .unwrap();
Breaking Changes 🛠
-
TaskMetadata.task_created_block
field changed tou64
#362 -
Refactor
bls_aggr
module in #363.- Separated the interface and service in the
bls_aggr
module.- To interact with the BLS aggregation service, use the
ServiceHandle
struct. Aggregation responses are now handled by theAggregateReceiver
struct.- To initialize both structs, use the
BLSAggregationService::start
method. It returns a tuple with theServiceHandle
andAggregateReceiver
structs.
- To initialize both structs, use the
- Add methods
start
andrun
toBLSAggregationService
struct.
- To interact with the BLS aggregation service, use the
- Removed
initialize_new_task
andprocess_new_signature
functions since their logic is now integrated inrun()
.
// Before let bls_agg_service = BlsAggregatorService::new(avs_registry_service, get_test_logger()); let metadata = TaskMetadata::new( task_index, block_number, quorum_numbers, quorum_threshold_percentages, time_to_expiry, ); bls_agg_service.initialize_new_task(metadata).await.unwrap(); bls_agg_service .process_new_signature(TaskSignature::new( task_index, task_response_digest, bls_signature, test_operator_1.operator_id, )) .await .unwrap(); // After let bls_agg_service = BlsAggregatorService::new(avs_registry_service, get_test_logger()); let (handle, mut aggregator_response) = bls_agg_service.start(); let metadata = TaskMetadata::new( task_index, block_number, quorum_numbers, quorum_threshold_percentages, time_to_expiry, ); handle.initialize_task(metadata).await.unwrap(); handle .process_signature(TaskSignature::new( task_index, task_response_digest, bls_signature, test_operator_1.operator_id, )) .await .unwrap();
- Separated the interface and service in the
Removed 🗑
- Removed
eigen-testing-utils
dependency fromeigen-cli
crate in #353. - Modifications to
eigen-testing-utils
in #357.- Removed
mine_anvil_blocks_operator_set
fromeigen-testing-utils
. Users should usemine_anvil_blocks
that does the same thing. - Removed the third parameter of
set_account_balance
. Now the port used is the default used onstart_anvil_container
andstart_m2_anvil_container
.
- Removed
Other Changes
- fix: missing block while waiting for operator state history by @najeal in #290
- feat: new method
set_churn_approver
by @pablodeymo in #333 - feat: new method
get_operator_restaked_strategies
by @damiramirez in #348 - feat: new method
register_operator_with_churn
by @damiramirez in #354 - feat: new method
get_restakeable_strategies
by @damiramirez in #349 - fix:
avsregistry/reader
tests by @damiramirez in #338 - refactor: remove testing-utils dep from CLI by @MegaRedHand in #353
- feat: new method
create_operator_directed_avs_rewards_submission
by @damiramirez in #352 - fix:
make start-anvil
wasn't working by @MegaRedHand in #356 - feat: implement create_avs_rewards_submission by @pablodeymo in #345
- refactor: separate interface and service in
bls_aggr
by @damiramirez in #363
New Contributors
Full Changelog: v0.3.0...v0.4.0-rc.1
v0.3.0 - Rewards 2.1 testnet
What's Changed
Added🎉
-
Added new method
set_slashable_stake_lookahead
inavsregistry/writer
in #278.let quorum_number = 0_u8; let lookahead = 10_u32; let tx_hash = avs_writer .set_slashable_stake_lookahead(quorum_number, lookahead) .await .unwrap();
-
Added new method
set_rewards_initiator
inavsregistry/writer
in #273.let tx_hash = avs_writer .set_rewards_initiator(new_rewards_init_address) .await .unwrap();
-
Added new method
clear_deallocation_queue
inelcontracts/writer
in #270let tx_hash_clear = el_chain_writer .clear_deallocation_queue( operator_address, vec![strategy_addr], vec![num_to_clear], ) .await .unwrap();
-
Added update_socket function for avs registry writer in #268
An example of use is the following:// Given an avs writer and a new socket address: let tx_hash = avs_writer .update_socket(new_socket_addr.into()) .await .unwrap(); let tx_status = wait_transaction(&http_endpoint, tx_hash) .await .unwrap() .status(); // tx_status should be true
-
Added Rewards2.1 support in #323.
- Set an operator's split on an operator set.
let operator_set = OperatorSet { avs: avs_address, id: 0, }; let new_split = 5; let tx_hash = el_chain_writer .set_operator_set_split(OPERATOR_ADDRESS, operator_set.clone(), new_split) .await .unwrap();
- Get an operator's split on an operator set.
let operator_set = OperatorSet { avs: avs_address, id: 0, }; let split = el_chain_writer .el_chain_reader .get_operator_set_split(OPERATOR_ADDRESS, operator_set) .await .unwrap();
-
Added new method
set_operator_set_param
inavsregistry/writer
in #327.let operator_set_params = OperatorSetParam { maxOperatorCount: 10, kickBIPsOfOperatorStake: 50, kickBIPsOfTotalStake: 50, }; let tx_hash = avs_writer .set_operator_set_param(0, operator_set_params.clone()) .await .unwrap();
-
Added new method
eject_operator
inavsregistry/writer
in #328.let register_operator_address = address!("f39Fd6e51aad88F6F4ce6aB8827279cffFb92266"); let quorum_nums = Bytes::from([0]); let tx_hash = avs_writer .eject_operator(register_operator_address, quorum_nums) .await .unwrap();
-
Added new method
is_operator_set_quorum
inavsregistry/writer
in #296.let operator_set_quourm = avs_reader.is_operator_set_quorum(0).await.unwrap();
-
Added version explicitly in crates in #322.
-
Added new method
set_account_identifier
inavsregistry/writer
in #329.let tx_hash = avs_writer .set_account_identifier(new_identifier_address) .await .unwrap();
Changed
Breaking changes🛠
- refactor: update interface on
bls aggregation
in #254-
Introduces a new struct
TaskMetadata
with a constructorTaskMetadata::new
to initialize a new task and a methodwith_window_duration
to set the window duration. -
Refactors
initialize_new_task
andsingle_task_aggregator
to accept aTaskMetadata
struct instead of multiple parameters.// BEFORE bls_agg_service .initialize_new_task( task_index, block_number as u32, quorum_numbers, quorum_threshold_percentages, time_to_expiry, ) .await .unwrap(); // AFTER let metadata = TaskMetadata::new( task_index, block_number, quorum_numbers, quorum_threshold_percentages, time_to_expiry, ) bls_agg_service.initialize_new_task(metadata).await.unwrap();
-
Removes
initialize_new_task_with_window
sincewindow_duration
can now be set inTaskMetadata
.// BEFORE bls_agg_service .initialize_new_task_with_window( task_index, block_number as u32, quorum_numbers, quorum_threshold_percentages, time_to_expiry, window_duration, ) .await .unwrap(); // AFTER let metadata = TaskMetadata::new( task_index, block_number, quorum_numbers, quorum_threshold_percentages, time_to_expiry, ).with_window_duration(window_duration); bls_agg_service.initialize_new_task(metadata).await.unwrap();
-
- refactor: encapsulate parameters into
TaskSignature
in #260- Introduced
TaskSignature
struct to encapsulate parameters related to task signatures: - Updated
process_new_signature
to accept aTaskSignature
struct instead of multiple parameters.// BEFORE bls_agg_service.process_new_signature(task_index, task_response_digest, bls_signature, operator_id).await.unwrap(); // AFTER let task_signature = TaskSignature::new( task_index, task_response_digest, bls_signature, operator_id, ); bls_agg_service.process_new_signature(task_signature).await.unwrap();
- Introduced
- Slashing UAM changes in #248.
Removed
Other Changes
- docs: add mention of updated bindings to changelog by @MegaRedHand in #233
- chore: format contracts by @ricomateo in #235
- ci: add foundry workflow by @ricomateo in #236
- ci: add CI job to check whether anvil state is up to date by @ricomateo in #237
- chore: remove existing bindings when generating new ones by @ricomateo in #242
- ci: add workflow to check bindings are up to date by @ricomateo in #243
- chore: remove alloy reexported crates from dependencies by @ricomateo in #244
- docs: sync root and
crates/eigensdk/
READMEs by @ricomateo in #245 - ci: add workflow to enforce updates to the changelog by @ricomateo in #239
- docs: add
RELEASE.md
by @MegaRedHand in #231 - ci: fix check bindings job by @pablodeymo in #247
- ci: fix job that checks anvil state is up-to-date by @ricomateo in #252
- refactor: move bindings generation to script by @MegaRedHand in #271
- chore: merge main by @MegaRedHand in #274
- chore: merge
main
todev
by @MegaRedHand in #305 - refactor:
bls_aggr
encapsulate parameters intoTaskSignature
by @damiramirez in #260 - feat: add new method
clear_deallocation_queue
by @damiramirez in #270 - feat: new method
set_rewards_initiator
by @damiramirez in #273 - fix: change provider value used by avs_reader in tests by @damiramirez in #306
- feat: new method
set_slashable_stake_lookahead
by @damiramirez in #278 - refactor: remove dead code in
AvsRegistryChainWriter
by @MegaRedHand in #332 - refactor: move anvil account constants to testing utils module by @MegaRedHand in #331
- feat: new method
is_operator_set_quorum
by @damiramirez in #296 - chore: release 0.3.0 by @supernovahs in #346
- revert 0.3.0 by @supernovahs in #350
- chore:release 0.3.0 by @supernovahs in #351
New Contributors
- @damiramirez made their first contribution in #260
Full Changelog: v0.1.3...v0.3.0
v0.2.0
What's Changed
Security 🔒
- chore(deps): bump openssl from 0.10.68 to 0.10.70 in the cargo group across 1 directory by @dependabot in #291
Added 🎉
-
Added
eigen_common
dependency to theeigensdk
crate when "full" feature is enabled in #249.-
Now when enabling the "full" feature:
eigensdk = { version = "0.2", features = ["full"] }
You can use access the
eigen-common
crate as a submodule ofeigensdk
:use eigensdk::common::*;
-
-
Added bindings for
ECDSAStakeRegistry
andECDSAServiceManagerBase
in #269.-
These bindings can be accessed from:
// From `eigensdk` use eigensdk::utils::middleware::ecdsaservicemanagerbase; use eigensdk::utils::middleware::ecdsastakeregistry; // From `eigen_utils` use eigen_utils::middleware::ecdsaservicemanagerbase; use eigen_utils::middleware::ecdsastakeregistry;
-
-
Starting on this release, we're using
release-plz
to streamline our release process.
Breaking Changes 🛠
-
fix: use rewards coordinator on get operator avs/pi split methods by @maximopalopoli in #250
-
The parameters of
ChainReader::new
changed, and it now receives the address of the rewards coordinator.It was previously called this way:
let el_chain_reader = ELChainReader::new( logger, SLASHER_ADDRESS, DELEGATION_MANAGER_ADDRESS, AVS_DIRECTORY_ADDRESS, provider_url, );
Now, it's called this way:
let el_chain_reader = ELChainReader::new( logger, SLASHER_ADDRESS, DELEGATION_MANAGER_ADDRESS, REWARDS_COORDINATOR, AVS_DIRECTORY_ADDRESS, provider_url, );
-
Removed 🗑
- Removed homepage from testing-utils crate in #266.
- Removed changelog generation by release-plz in #281.
- Removed examples packages from workspace.dependencies in Cargo.toml in #287.
- Removed release-plz-pr workflow in release-plz in #292.
Documentation 📚
- Fixed the rewardsv2 bindings version in readme to 0.5.4 in #246.
- docs: improve changelog by adding examples by @maximopalopoli in #251
Other Changes
- Changes in the way bindings are generated in #243.
- The
bindings
target now generates the bindings using Docker with Foundry v0.3.0. - The previous
bindings
target was renamed tobindings_host
, as it runs without Docker. However thebindings_host
target is for CI use only. To generate the bindings, please use thebindings
target.
- The
- Fixed incorrect package name in Cargo.toml for examples in #285.
- docs: add mention of updated bindings to changelog by @MegaRedHand in #233
- chore: format contracts by @ricomateo in #235
- ci: add foundry workflow by @ricomateo in #236
- ci: add CI job to check whether anvil state is up to date by @ricomateo in #237
- chore: remove existing bindings when generating new ones by @ricomateo in #242
- chore: remove alloy reexported crates from dependencies by @ricomateo in #244
- docs: sync root and
crates/eigensdk/
READMEs by @ricomateo in #245 - ci: add workflow to enforce updates to the changelog by @ricomateo in #239
- docs: add
RELEASE.md
by @MegaRedHand in #231 - ci: fix check bindings job by @pablodeymo in #247
- ci: fix job that checks anvil state is up-to-date by @ricomateo in #252
- refactor: move bindings generation to script by @MegaRedHand in #271
- fix: simplify Cargo.toml by @MegaRedHand in #282
- ci: split tests and coverage by @MegaRedHand in #286
New Contributors
- @dependabot made their first contribution in #291
- @maximopalopoli made their first contribution in #251
Full Changelog: v0.1.3...v0.2.0
v0.1.3 - mainnet-rewards-v2
What's Changed
Added 🎉
- feat: add rewards-v2 related functionality by @supernovahs in #221
- New methods in
ELChainReader
:get_operator_avs_split
get_operator_pi_split
- New methods in
ELChainWriter
:set_operator_avs_split
set_operator_pi_split
- Bindings updated for rewards-v2 core contracts release
- New methods in
Breaking Changes 🛠
- feat!: remove delegation manager from
ELChainWriter
by @supernovahs in #214ELChainWriter::new
no longer receives the delegation manager address as first parameter.
- feat!: change way bindings are generated by @MegaRedHand in #204
eigen_utils::core
contains bindings related to core contractseigen_utils::middleware
contains bindings related to middleware contractseigen_utils::sdk
contains bindings related to the SDK (should only be used for testing)
Documentation 📚
- docs: add CHANGELOG.md by @lferrigno in #220
Other Changes
- ci: change docker setup action for official one by @MegaRedHand in #219
- docs: add error message for
cargo test
on darwin by @MegaRedHand in #215 - test: fix
test_register_and_update_operator
by @ricomateo in #223 - chore: update way anvil state dump is generated by @ricomateo in #222
- fix: disable doctests on
eigen-utils
by @MegaRedHand in #227 - chore: bump version by @MegaRedHand in #228
- docs: add GitHub release changelog configuration by @MegaRedHand in #229
New Contributors
- @lferrigno made their first contribution in #220
Full Changelog: v0.1.2...v0.1.3
v0.1.2 - mainnet-rewards
What's Changed
- chore:alloy bump by @supernovahs in #172
- Fix BLS signature by @pablodeymo in #174
- Add retries with exponential backoff to send transactions by @TomasArrachea in #158
- query_registration_detail method by @pablodeymo in #162
- Fix Holesky RPC provider url by @TomasArrachea in #184
- Add clippy lints in Cargo.toml by @pablodeymo in #159
- Blsagg logger by @pablodeymo in #154
- Remove logs in operatorsinfo test by @TomasArrachea in #185
- Contract Bindings section in the README by @pablodeymo in #178
- Update eigenlayer-middleware to v.0.4.3 rewards release by @TomasArrachea in #177
- Delete TxManager by @TomasArrachea in #151
- add branches section in readme by @supernovahs in #200
- docs: add some notes for running tests by @MegaRedHand in #194
- chore: merge main to dev by @MegaRedHand in #203
- chore: bump workspace version by @MegaRedHand in #210
- chore: remove txmanager crate import by @MegaRedHand in #211
- add common crate to eigensdk crate by @supernovahs in #213
Full Changelog: v0.1.1...v0.1.2
v0.1.1
Notable change
The most notable change in this release is the addition of a BLS Aggregation window waiting period after quorum is reached.
What's Changed
- update main readme also by @supernovahs in #139
- Update README.md by @antojoseph in #140
- update alloy by @supernovahs in #144
- Fix TxManager and AvsRegistry Reader tests by @TomasArrachea in #146
- Add Rewards methods by @TomasArrachea in #145
- Add README to eigen-cli by @TomasArrachea in #143
- Fix TxManager, InstrumentedClient, Signer tests by @TomasArrachea in #150
- Use transaction watcher in tests by @TomasArrachea in #137
- Fix get_operator_info example by @TomasArrachea in #153
- operator socket support in services by @supernovahs in #156
- Add Geometric TxManager by @TomasArrachea in #149
- update deps by @supernovahs in #155
- Fix fake backend by @pablodeymo in #157
- Fix BLS Aggregation for multiple quorums by @TomasArrachea in #160
- Add BLS Aggregation window waiting after quorum by @TomasArrachea in #152
- Fix install instruction by @nuke-web3 in #148
- remove patch version from deps by @supernovahs in #164
New Contributors
- @antojoseph made their first contribution in #140
- @nuke-web3 made their first contribution in #148
Full Changelog: v0.1.0...v0.1.1
eigensdk-rs v0.1.0
Summary
This is our first release 🎉. The SDK has achieved full feature parity with the Go SDK.
Main features are:-
- chainio: Interact with the eigenlayer contracts along with AVS contracts.
- bls: Signing, verifying, alloy utilities for bn254 curve using arkworks.
- eigen-cli: Supports keystore generation for ECDSA and BLS(compatible with EIP 2333,2334,2335)
- metrics: Eigenlayer metrics implementation
- nodeapi: Eigenlayer nodeapi implementation
- services: Get operators info, aggregate bls signatures , get operators avs state
- signer: aws signer, web3 signer,keystore signer and private key signer.
- testing-utils: Contains publicly exportable addresses of eigenlayer contract, middleware contracts for holesky, mainnet and anvil utilities.
- example : Examples demonstrating the use of SDK.
- logging: Utility to get logger, noop_logger (for testing).
What's Changed
- release readme by @supernovahs (#135)
- add binding files in same crate by @supernovahs (#136)
- upload coverage html report in CI by @TomasArrachea (#134)
- Fix duplicate signature aggregation by @TomasArrachea (#133)
- fix avsregistryreader test by @TomasArrachea (#132)
- remove duplicate statement in readme (#131)
- Elcontracts reader tests by @pablodeymo @TomasArrachea (#130)
- use anvil on tests by @TomasArrachea and @pablodeymo (#129)
- Removed unused empty crate chainio/utils by @pablodeymo (#128)
- Improve error handling in fireblocks crate by @pablodeymo (#127)
- Simplify Operator struct by @pablodeymo (#126)
- Add docs and error handling improved by @pablodeymo and @TomasArrachea (#125)
- Removed ignored tests in BLS Aggregation tests (#124)
- add telegram group link by @supernovahs (#122)
- Add AvsRegistryReader tests by @TomasArrachea (#121)
- Add fireblock tests to CI by @TomasArrachea (#120)
- Add rpc_url input to egn_addr test by @TomasArrachea (#118)
- Test Get operator pubkeys renamed by @pablodeymo (#117 )
- readme v0.1.0 by @supernovahs (#115)
- Add signer test to compliance by @TomasArrachea (#112)
- adding attributes to the functions of avsregistry/chaincaller by @pablodeymo (#111)
- name in license to eigensdk-rs by @supernovahs (#109)
- node api by @supernovahs (#108)
- fix ci by @TomasArrachea (#107)
- update coverage target by @TomasArrachea (#104)
- compliance tests verification @pablodeymo @TomasArrachea (#103)
- refactor test utils by @pablodeymo (#102)
- clippy by @pablodeymo @TomasArrachea (#100)
- fix:typo in register_operator_in_quorum_with_avs_registry_coordinator @supernovahs (#99)
- update metrics , remove the use of metrics-derive by @supernovahs (#98)
- add test coverage to ci by @TomasArrachea (#97)
- fix: bls aggregation integration test by @TomasArrachea (#96)
- remove unused code @pablodeymo (#95)
- remove avs registry subscriber by @TomasArrachea (#93)
- serialize operators info test execution by @TomasArrachea (#92)
- bls aggregation integration test by @TomasArrachea (#91)
- avs registry service chaincaller test by @ricomateo (#90)
- elcontracts writer tests by @pablodeymo (#88)
- cargo-abc by @supernovahs (#87)
- unused deps removal by @pablodeymo (#86)
- tests and code improvement in avs registry writer @pablodeymo (#85)
- nits from incredible squaring avs by @supernovahs (#84)
- fix: main error by @supernovahs (#83)
- make bls key pair debug by @supernovahs (#82)
- feat: bls aggregation by @ricomateo (#81)
- run clippy on ci @juanbono (#78)
- add support for noop logger by @supernovahs (#77)
- fix: get_logger by @supernovahs (#76)
- remove redundant scripts by @juanbono (#74)
- reset anvil before running tests by @juanbono (#73)
- bls keystore and mnemonic by @supernovahs (#72)
- eigenkeycli functionality @ricomateo (#71)
- fix warning in dependency used in test @pablodeymo (#70)
- bls crate @supernovahs (#69)
- eth client by @pablodeymo (#68)
- chore: update eigenlayer-middleware to latest dev @supernovahs (#67)
- make clippy happy @supernovahs (#66)
- doc port from go sdk and crate readme @supernovahs (#65)
- egnaddrs cli functionality by @ricomateo (#64)
- new custodian @supernovahs (#63)
- logging integration @supernovahs (#62)
- tx manager by @pablodeymo (#61)
- add how to obtain test coverage to readme @dralves (#60)
- feat(eigen-services-operatorsinfo): Testing by @supernovahs (#59)
- feat(metrics):tests by @supernovahs (#58)
- web3 signer functionality by @ricomateo (#56)
- update readme banner by @NimaVaziri (#55)
- signer functionality by @TomasArrachea (#54)
- fireblocks support read @supernovahs (#53)
- logging functionality by @pablodeymo (#51)
- test included inside mod tests block by @pablodeymo (#50)
- update readme by @supernovahs (#48 )
- support alloy errors by @supernovahs(#47)
- feat(AvsRegistryChainWriter): Remove redundant new function , use build method instead(#46)
- feat(crypto-bls): Add priv_key method(#44)
- feature/bls bn254 keystore utils by @iStrike7 @supernovahs( #43 )
- cryptobls by @supernovahs(#41)
- add method to get priv key from key pair by @supernovahs(#40)
- feat(cryptobls): make keypair debug by @supernovahs(#39)
- feat(anvil):Add more contracts in contractregistry by @supernovahs(#38)
- avsregistry remove unneeded stakeregistry param by @supernovahs(#37)
- feat(refactor): avsregistry reader for better ux by @supernovahs(#36)
- ci fix by @supernovahs(#33)
- clippy by @supernovahs(#32)
- feat( ContractsRegistry): reproducible and consistent state for anvil testing by @supernovahs(#31)
- elcontracts reader tests by @supernovahs(#30)
- add make pr command by @supernovahs(#27)
- add warning in readme :unaudited by @supernovahs (#26)
- bump alloy to stable version by @supernovahs (#25)
- add anvil utilities by @supernovahs (#22)
- testing utilities by @supernovahs (#20)
- chore:use common bindings by @supernovahs (#18)
- update submodule of middleware to m2 by @supernovahs (#17)
- better ux for sdk by @supernovahs (#16)
- example section in readme by @supernovahs (#14)
- feat(metrics) by @supernovahs (#13)
- testing, cleanup, docs by @supernovahs (#12)
- add method in keypair: FromString and tests by @supernovahs (#11 )
- fix: u256 bug and some bls tests by @supernovahs (#10)
- change branding to eigen-rs by @supernovahs (#9)
- adding tests by @supernovahs (#6)
- feat(examples): get operator info service by @supernovahs (#5)
- alloy integration by @supernovahs (#4)