Skip to content

Commit

Permalink
Merge branch 'nico/feat/mainnet-genesis-cli' of github.com:chainbound…
Browse files Browse the repository at this point in the history
…/bolt into nico/feat/mainnet-genesis-cli
  • Loading branch information
mempirate committed Jan 24, 2025
2 parents e09f68b + e9a76af commit 2e5feb3
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 143 deletions.
35 changes: 16 additions & 19 deletions bolt-cli/src/commands/operators/eigenlayer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,15 @@ use tracing::{info, warn};
use crate::{
cli::{Chain, EigenLayerSubcommand},
common::{
bolt_manager::BoltManagerContract::{self, BoltManagerContractErrors},
request_confirmation, try_parse_contract_error,
// bolt_manager::BoltManagerContract::{self, BoltManagerContractErrors},
request_confirmation,
try_parse_contract_error,
},
contracts::{
bolt::{
BoltEigenLayerMiddlewareHolesky::{self, BoltEigenLayerMiddlewareHoleskyErrors},
BoltEigenLayerMiddlewareMainnet::{self, BoltEigenLayerMiddlewareMainnetErrors},
BoltManager::{self, BoltManagerErrors},
OperatorsRegistryV1::{self, OperatorsRegistryV1Errors},
SignatureWithSaltAndExpiry,
},
Expand Down Expand Up @@ -147,11 +149,7 @@ impl EigenLayerSubcommand {
BoltEigenLayerMiddlewareMainnet::new(bolt_avs_address, provider.clone());

match el_middleware
.registerThroughAVSDirectory(
operator_rpc.to_string(),
extra_data,
signature,
)
.registerOperatorToAVS(operator_rpc.to_string(), extra_data, signature)
.send()
.await
{
Expand Down Expand Up @@ -223,7 +221,7 @@ impl EigenLayerSubcommand {
let el_middleware =
BoltEigenLayerMiddlewareMainnet::new(bolt_avs_address, provider);

match el_middleware.deregisterThroughAVSDirectory().send().await {
match el_middleware.deregisterOperatorFromAVS().send().await {
Ok(pending) => {
info!(
hash = ?pending.tx_hash(),
Expand Down Expand Up @@ -310,8 +308,7 @@ impl EigenLayerSubcommand {
Err(e) => parse_eigenlayer_middleware_mainnet_errors(e)?,
}
} else if chain == Chain::Holesky {
let bolt_manager =
BoltManagerContract::new(deployments.bolt.manager, provider.clone());
let bolt_manager = BoltManager::new(deployments.bolt.manager, provider.clone());

if bolt_manager.isOperator(address).call().await?._0 {
info!(?address, "EigenLayer operator is registered");
Expand All @@ -334,8 +331,8 @@ impl EigenLayerSubcommand {

info!("Succesfully updated EigenLayer operator RPC");
}
Err(e) => match try_parse_contract_error::<BoltManagerContractErrors>(e)? {
BoltManagerContractErrors::OperatorNotRegistered(_) => {
Err(e) => match try_parse_contract_error::<BoltManagerErrors>(e)? {
BoltManagerErrors::OperatorNotRegistered(_) => {
eyre::bail!("Operator not registered in bolt")
}
other => {
Expand Down Expand Up @@ -384,7 +381,7 @@ impl EigenLayerSubcommand {
Err(e) => {
let other = try_parse_contract_error::<OperatorsRegistryV1Errors>(e)?;
bail!("Unexpected error with selector {:?}", other.selector())
},
}
}

match registry.isActiveOperator(address).call().await {
Expand All @@ -398,7 +395,7 @@ impl EigenLayerSubcommand {
Err(e) => {
let other = try_parse_contract_error::<OperatorsRegistryV1Errors>(e)?;
bail!("Unexpected error with selector {:?}", other.selector())
},
}
}

match el_middleware.getOperatorCollaterals(address).call().await {
Expand All @@ -420,8 +417,8 @@ impl EigenLayerSubcommand {
Err(e) => parse_eigenlayer_middleware_mainnet_errors(e)?,
}
} else if chain == Chain::Holesky {
let bolt_manager =
BoltManagerContract::new(deployments.bolt.manager, provider.clone());
let bolt_manager = BoltManager::new(deployments.bolt.manager, provider.clone());

if bolt_manager.isOperator(address).call().await?._0 {
info!(?address, "EigenLayer operator is registered");
} else {
Expand All @@ -438,9 +435,9 @@ impl EigenLayerSubcommand {
Ok(operator_data) => {
info!(?address, operator_data = ?operator_data._0, "Operator data");
}
Err(e) => match try_parse_contract_error::<BoltManagerContractErrors>(e)? {
BoltManagerContractErrors::KeyNotFound(_) => {
warn!(?address, "Operator data not found");
Err(e) => match try_parse_contract_error::<BoltManagerErrors>(e)? {
BoltManagerErrors::KeyNotFound(key) => {
warn!(?address, "Operator data not found: {:?}", key.key);
}
other => {
unreachable!(
Expand Down
22 changes: 11 additions & 11 deletions bolt-cli/src/commands/operators/symbiotic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,14 @@ use tracing::{info, warn};
use crate::{
cli::{Chain, SymbioticSubcommand},
common::{
bolt_manager::BoltManagerContract::{self, BoltManagerContractErrors},
request_confirmation, try_parse_contract_error,
},
contracts::{
bolt::{
BoltSymbioticMiddlewareHolesky::{self, BoltSymbioticMiddlewareHoleskyErrors},
BoltSymbioticMiddlewareMainnet::{self, BoltSymbioticMiddlewareMainnetErrors}, OperatorsRegistryV1::{self, OperatorsRegistryV1Errors},
BoltManager::{self, BoltManagerErrors},
BoltSymbioticMiddlewareHolesky::{self, BoltSymbioticMiddlewareHoleskyErrors},
BoltSymbioticMiddlewareMainnet::{self, BoltSymbioticMiddlewareMainnetErrors},
OperatorsRegistryV1::{self, OperatorsRegistryV1Errors}
},
deployments_for_chain,
symbiotic::IOptInService,
Expand Down Expand Up @@ -210,8 +211,7 @@ impl SymbioticSubcommand {

let deployments = deployments_for_chain(chain);

let bolt_manager =
BoltManagerContract::new(deployments.bolt.manager, provider.clone());
let bolt_manager = BoltManager::new(deployments.bolt.manager, provider.clone());
if bolt_manager.isOperator(address).call().await?._0 {
info!(?address, "Symbiotic operator is registered");
} else {
Expand All @@ -233,8 +233,8 @@ impl SymbioticSubcommand {

info!("Succesfully updated Symbiotic operator RPC");
}
Err(e) => match try_parse_contract_error::<BoltManagerContractErrors>(e)? {
BoltManagerContractErrors::OperatorNotRegistered(_) => {
Err(e) => match try_parse_contract_error::<BoltManagerErrors>(e)? {
BoltManagerErrors::OperatorNotRegistered(_) => {
eyre::bail!("Operator not registered in bolt")
}
other => {
Expand Down Expand Up @@ -315,8 +315,8 @@ impl SymbioticSubcommand {
Err(e) => parse_symbiotic_middleware_mainnet_errors(e)?,
}
} else if chain == Chain::Holesky {
let bolt_manager =
BoltManagerContract::new(deployments.bolt.manager, provider.clone());
let bolt_manager = BoltManager::new(deployments.bolt.manager, provider.clone());

if bolt_manager.isOperator(address).call().await?._0 {
info!(?address, "Symbiotic operator is registered");
} else {
Expand All @@ -330,8 +330,8 @@ impl SymbioticSubcommand {
Ok(operator_data) => {
info!(?address, operator_data = ?operator_data._0, "Operator data");
}
Err(e) => match try_parse_contract_error::<BoltManagerContractErrors>(e)? {
BoltManagerContractErrors::KeyNotFound(_) => {
Err(e) => match try_parse_contract_error::<BoltManagerErrors>(e)? {
BoltManagerErrors::KeyNotFound(_) => {
warn!(?address, "Operator data not found");
}
other => {
Expand Down
108 changes: 0 additions & 108 deletions bolt-cli/src/common/bolt_manager.rs

This file was deleted.

3 changes: 0 additions & 3 deletions bolt-cli/src/common/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ use inquire::{error::InquireError, Confirm};
use serde::Serialize;
use tracing::{error, info};

/// BoltManager contract bindings.
pub mod bolt_manager;

/// Utilities for working with DIRK remote keystores.
pub mod dirk;

Expand Down
48 changes: 46 additions & 2 deletions bolt-cli/src/contracts/bolt.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,48 @@
use alloy::sol;
use serde::Serialize;

// Mainnet Genesis: deprecated
sol! {
#[sol(rpc)]
interface BoltManager {
#[derive(Debug, Default, Serialize)]
struct ProposerStatus {
bytes32 pubkeyHash;
bool active;
address operator;
string operatorRPC;
address[] collaterals;
uint256[] amounts;
}

#[derive(Debug, Default, Serialize)]
struct Operator {
// RPC endpoint
string rpc;
// Middleware contract address
address middleware;
// Timestamp of registration
uint256 timestamp;
}

function getProposerStatus(bytes32 pubkeyHash) external view returns (ProposerStatus memory);

function isOperator(address operator) public view returns (bool);

function getOperatorStake(address operator, address collateral) public view returns (uint256);

/// @notice Update the RPC associated to msg.sender.
function updateOperatorRPC(string calldata rpc) external;

function getOperatorData(address operator) public view returns (Operator memory);

error InvalidQuery();
error ValidatorDoesNotExist();
error OperatorNotRegistered();
error KeyNotFound(address key);
}
}

// Mainnet Genesis: deprecated
sol! {
#[allow(missing_docs)]
Expand Down Expand Up @@ -120,13 +162,15 @@ sol! {

function getOperatorStake(address operator, address collateral) public view returns (uint256);

function registerThroughAVSDirectory(
function registerOperatorToAVS(
string memory rpcEndpoint,
string memory extraData,
SignatureWithSaltAndExpiry calldata operatorSignature
) public;

function deregisterThroughAVSDirectory() public;
function deregisterOperatorFromAVS() public;

function updateOperatorsRegistryAddress(address newOperatorsRegistry) public;

error InvalidRpc();
error InvalidSigner();
Expand Down

0 comments on commit 2e5feb3

Please sign in to comment.