Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion api/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ async fn run_server(args: &Args) {
.await
.expect("Mongo connection failed.");
let db = c.database(&args.mongo_db_name);
let cluster = Cluster::get_cluster(&args.solana_cluster);
let cluster = Cluster::get_cluster(&args.solana_cluster).expect("Failed to get cluster");

let query_resolver = QueryResolver::new(&db, &args.rpc_url, cluster);

Expand Down
9 changes: 9 additions & 0 deletions core/src/error.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
use thiserror::Error;

#[derive(Debug, Error)]
pub enum KobeCoreError {
#[error(
"Invalid cluster value: '{0}'. Expected 'testnet', 'mainnet', 'mainnet-beta', or 'devnet'"
)]
InvalidCluster(String),
}
1 change: 1 addition & 0 deletions core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use crate::db_models::validators::Validator;
pub mod client_type;
pub mod constants;
pub mod db_models;
pub mod error;
pub mod fetcher;
pub mod mongo;
pub mod rpc_utils;
Expand Down
11 changes: 7 additions & 4 deletions core/src/validators_app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ use log::*;
use serde::{Deserialize, Serialize};
use solana_pubkey::Pubkey;

use crate::error::KobeCoreError;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum Cluster {
Devnet,
Expand All @@ -22,11 +24,12 @@ pub enum Cluster {

impl Cluster {
/// Get cluster value
pub fn get_cluster(value: &str) -> Cluster {
pub fn get_cluster(value: &str) -> Result<Cluster, KobeCoreError> {
match value.to_lowercase().as_ref() {
"testnet" | "t" => Cluster::Testnet,
"mainnet-beta" | "mainnet" | "m" => Cluster::MainnetBeta,
_ => Cluster::Testnet,
"mainnet-beta" | "mainnet" | "m" => Ok(Cluster::MainnetBeta),
"testnet" | "t" => Ok(Cluster::Testnet),
"devnet" | "d" => Ok(Cluster::Devnet),
_ => Err(KobeCoreError::InvalidCluster(value.to_string())),
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions cranker/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use std::time::Duration;
use backon::{ExponentialBuilder, Retryable};
use clap::Parser;
use env_logger::{Builder, Target};
use kobe_core::validators_app::Cluster;
use log::*;
use solana_client::nonblocking::rpc_client::RpcClient;
use solana_metrics::set_host_id;
Expand Down Expand Up @@ -95,6 +96,7 @@ fn main() {

Config {
rpc_client,
cluster: Cluster::get_cluster(&args.network).expect("Failed to get cluster"),
fee_payer,
stake_pool_address,
dry_run: args.dry_run,
Expand Down
22 changes: 20 additions & 2 deletions cranker/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use std::{collections::HashMap, thread::sleep, time::Duration};

use anyhow::anyhow;
use backon::{ExponentialBuilder, Retryable};
use kobe_core::constants::CRANKER_UPDATE_CHANNEL;
use kobe_core::{constants::CRANKER_UPDATE_CHANNEL, validators_app::Cluster};
use log::*;
use solana_cli_output::display::new_spinner_progress_bar;
use solana_client::{
Expand Down Expand Up @@ -34,12 +34,27 @@ pub enum TransactionRetryError {
RetryError,
}

/// Kobe Cranker Config
pub struct Config {
/// RPC Client
pub rpc_client: RpcClient,

/// Cluster (Mainnet-beta, Testnet, Devnet)
pub cluster: Cluster,

/// Fee payer
pub fee_payer: Box<dyn Signer>,

/// Stake pool address
pub stake_pool_address: Pubkey,

/// Dry run mode
pub dry_run: bool,

/// Simulate
pub simulate: bool,

/// Slack API Token
pub slack_api_token: Option<String>,
}

Expand Down Expand Up @@ -234,7 +249,10 @@ pub async fn parallel_execute_stake_pool_update(
let validator_list = get_validator_list(&config.rpc_client, &stake_pool.validator_list)
.await
.map_err(|e| anyhow!("{e}"))?;
let program_id = spl_stake_pool::id();
let program_id = match config.cluster {
Cluster::MainnetBeta | Cluster::Testnet => spl_stake_pool::id(),
Cluster::Devnet => spl_stake_pool::devnet::id(),
};

let (update_list_instructions, final_instructions) = update_stake_pool(
&program_id,
Expand Down
2 changes: 1 addition & 1 deletion writer-service/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ fn init_logger(cluster: &Cluster) -> Result<()> {
fn main() -> Result<()> {
dotenvy::dotenv().ok();
let args: Args = Args::parse();
let cluster = Cluster::get_cluster(&args.solana_cluster);
let cluster = Cluster::get_cluster(&args.solana_cluster)?;
init_logger(&cluster)?;

// Set up panic alerting via Sentry
Expand Down
4 changes: 4 additions & 0 deletions writer-service/src/result.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use std::io::Error as IoError;

use backoff::Error as BackoffError;
use kobe_core::error::KobeCoreError;
use log::SetLoggerError;
use mongodb::error::Error as MongoError;
use reqwest::Error as ReqwestError;
Expand Down Expand Up @@ -61,6 +62,9 @@ pub enum AppError {

#[error("Join errorr")]
JoinError(#[from] tokio::task::JoinError),

#[error(transparent)]
KobeCore(#[from] KobeCoreError),
}

impl From<BackoffError<ClientError>> for AppError {
Expand Down
Loading