Skip to content

refactor: encapsulate oracle config access via getter methods #334

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: develop
Choose a base branch
from
Open
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
49 changes: 23 additions & 26 deletions core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,40 +14,37 @@ edition = "2021"

[dependencies]
yaml-rust = "0.4.4"
reqwest = { version = "0.11", features = ["blocking"] }
url = { version = "2.2", features = ["serde"] }
serde = { version = "1.0", features = ["derive"] }
serde_yaml = "0.9"
reqwest = { version = "0.11.27", features = ["blocking"] }
url = { version = "2.5.4", features = ["serde"] }
serde = { version = "1.0.219", features = ["derive"] }
serde_yaml = "0.9.27"
json = "0.12.4"
serde_json = "1.0.57"
thiserror = "1.0.20"
anyhow = "1.0.32"
serde_json = "1.0.140"
thiserror = "1.0.69"
anyhow = "1.0.97"
base16 = "0.2.1"
base64 = "0.13.0"
log = "0.4.11"
log-panics = "2.0.0"
log4rs = "1.2.0"
crossbeam = "0.8"
tokio = { version = "1", features = ["full"] }
tower-http = { version = "0.3.0", features = ["cors"] }
axum = "0.6"
base64 = "0.13.1"
log = "0.4.27"
log-panics = "2.1.0"
log4rs = "1.3.0"
crossbeam = "0.8.4"
tokio = { version = "1.44.1", features = ["full"] }
tower-http = { version = "0.3.5", features = ["cors"] }
axum = "0.6.20"
ergo-lib = { workspace = true }
ergo-node-interface = { version = "0.5.0" }
derive_more = "0.99"
clap = { version = "4.2.4", features = ["derive"] }
derive_more = "0.99.19"
clap = { version = "4.5.35", features = ["derive"] }
exitcode = "1.1.2"
lazy_static = "1.4.0"
once_cell = "1.15.0"
futures = "0.3"
prometheus = "0.13"
lazy_static = "1.5.0"
once_cell = "1.21.3"
futures = "0.3.31"
prometheus = "0.13.4"

[dev-dependencies]
ergo-lib = { workspace = true, features = ["arbitrary"] }
proptest = { version = "1.0.0" }
proptest-derive = { version = "0.3.0" }
sigma-test-util = { version = "0.3.0" }
ergo-chain-sim = { version = "0.1.0", path = "../ergo-chain-sim" }
env_logger = { version = "0.10.0" }
tokio-test = { version = "0.4" }
pretty_assertions = { workspace = true }
expect-test = "1.0.1"
env_logger = { version = "0.10.2" }
tokio-test = { version = "0.4.4" }
4 changes: 2 additions & 2 deletions core/src/actions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ fn execute_refresh_action(
node_api: &NodeApi,
) -> Result<(), ActionExecError> {
let tx_id = node_api.sign_and_submit_transaction(action.transaction_context)?;
let network_prefix = &ORACLE_CONFIG.oracle_address.network();
let network_prefix = &ORACLE_CONFIG.get_network_prefix();
log::info!(
"Refresh tx published. Check status: {}",
ergo_explorer_transaction_link(tx_id, *network_prefix)
Expand All @@ -77,7 +77,7 @@ fn execute_publish_datapoint_action(
node_api: &NodeApi,
) -> Result<(), ActionExecError> {
let tx_id = node_api.sign_and_submit_transaction(action.transaction_context)?;
let network_prefix = &ORACLE_CONFIG.oracle_address.network();
let network_prefix = &ORACLE_CONFIG.get_network_prefix();
log::info!(
"Datapoint tx published. Check status: {}",
ergo_explorer_transaction_link(tx_id, *network_prefix)
Expand Down
6 changes: 3 additions & 3 deletions core/src/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ async fn root() -> &'static str {
async fn oracle_info() -> impl IntoResponse {
let conf = &ORACLE_CONFIG;
Json(json! ( {
"oracle_address": conf.oracle_address.to_base58(),
"oracle_address": conf.get_oracle_address().to_base58(),
"base_fee": conf.base_fee,
} ))
}
Expand Down Expand Up @@ -79,7 +79,7 @@ fn oracle_status_sync(oracle_pool: Arc<OraclePool>) -> Result<Json<serde_json::V
// Basic information about the oracle pool
async fn pool_info() -> impl IntoResponse {
let conf = &POOL_CONFIG;
let network = &ORACLE_CONFIG.oracle_address.network();
let network = &ORACLE_CONFIG.get_network_prefix();
let address_encoder = AddressEncoder::new(*network);
let pool_box_address = Address::P2S(
conf.pool_box_wrapper_inputs
Expand Down Expand Up @@ -243,7 +243,7 @@ fn pool_health_sync(oracle_pool: Arc<OraclePool>) -> Result<PoolHealth, ApiError
let current_height = (node_api.node.current_block_height()? as u32).into();
let pool_box = &oracle_pool.get_pool_box_source().get_pool_box()?;
let pool_box_height = pool_box.get_box().creation_height.into();
let network_prefix = ORACLE_CONFIG.change_address.clone().unwrap().network();
let network_prefix = ORACLE_CONFIG.get_network_prefix();
let pool_health = check_pool_health(
current_height,
pool_box_height,
Expand Down
4 changes: 2 additions & 2 deletions core/src/cli_commands/bootstrap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,11 @@ pub fn bootstrap(config_file_name: String, node_api: &NodeApi) -> Result<(), any
let oracle_config = &ORACLE_CONFIG;
let s = std::fs::read_to_string(config_file_name)?;
let config: BootstrapConfig = serde_yaml::from_str(&s)?;
let change_address = ORACLE_CONFIG.change_address.clone().unwrap();
let change_address = ORACLE_CONFIG.get_change_address().clone();
debug!("Change address: {:?}", change_address);
let erg_value_per_box = config.oracle_contract_parameters.min_storage_rent;
let input = BootstrapInput {
oracle_address: oracle_config.oracle_address.clone(),
oracle_address: oracle_config.get_oracle_address().clone(),
config,
node_api,
tx_fee: *BASE_FEE,
Expand Down
6 changes: 3 additions & 3 deletions core/src/cli_commands/extract_reward_tokens.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,15 +74,15 @@ pub fn extract_reward_tokens(
let rewards_destination =
AddressEncoder::unchecked_parse_network_address_from_str(&rewards_destination_str)?;
let network_prefix = rewards_destination.network();
let oracle_address = ORACLE_CONFIG.oracle_address.clone();
let change_address = ORACLE_CONFIG.change_address.clone();
let oracle_address = ORACLE_CONFIG.get_oracle_address().clone();
let change_address = ORACLE_CONFIG.get_change_address().clone();
let (context, num_reward_tokens) = build_extract_reward_tokens_tx(
local_datapoint_box_source,
node_api,
rewards_destination.address(),
height,
oracle_address,
change_address.unwrap().address(),
change_address.address(),
)?;

println!(
Expand Down
17 changes: 7 additions & 10 deletions core/src/cli_commands/prepare_update.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ pub fn prepare_update(
let s = std::fs::read_to_string(config_file_name)?;
let config_serde: UpdateBootstrapConfigSerde = serde_yaml::from_str(&s)?;

let change_address = ORACLE_CONFIG.change_address.clone().unwrap().address();
let change_address = ORACLE_CONFIG.get_change_address().clone().address();
let config = UpdateBootstrapConfig::try_from(config_serde)?;
let update_bootstrap_input = PrepareUpdateInput {
node_api,
Expand Down Expand Up @@ -199,7 +199,7 @@ impl<'a> PrepareUpdate<'a> {
pool_config: &'a PoolConfig,
oracle_config: &'a OracleConfig,
) -> Result<Self, PrepareUpdateError> {
let wallet_pk_ergo_tree = oracle_config.oracle_address.address().script()?;
let wallet_pk_ergo_tree = oracle_config.get_oracle_address().address().script()?;
Ok(Self {
input,
wallet_pk_ergo_tree,
Expand Down Expand Up @@ -341,7 +341,7 @@ impl<'a> PrepareUpdate<'a> {
let target_balance = self.calc_target_balance(self.num_transactions_left)?;
debug!("target_balance: {:?}", target_balance);
let unspent_boxes = self.input.node_api.get_unspent_boxes_by_address(
&self.oracle_config.oracle_address.to_base58(),
&self.oracle_config.get_oracle_address().to_base58(),
target_balance,
[].into(),
)?;
Expand Down Expand Up @@ -617,16 +617,16 @@ token_ids:
rescan_height: 141887
"#).unwrap();

let old_oracle_config: OracleConfig = serde_yaml::from_str(
let mut old_oracle_config: OracleConfig = serde_yaml::from_str(
r#"
node_url: http://10.94.77.47:9052
base_fee: 1100000
scan_start_height: 0
log_level: ~
core_api_port: 9010
oracle_address: 3Wy3BaCjGDWE3bjjZkNo3aWaMz3cYrePMFhchcKovY9uG9vhpAuW
data_point_source: NanoErgXau
data_point_source_custom_script: ~
oracle_network: testnet
"#,
)
.unwrap();
Expand All @@ -638,10 +638,7 @@ data_point_source_custom_script: ~
NetworkPrefix::Testnet,
&Address::P2Pk(secret.public_image()),
);
let old_oracle_config = OracleConfig {
oracle_address: network_address.clone(),
..old_oracle_config
};
old_oracle_config.set_oracle_address(Some(network_address.clone()));
let ergo_tree = network_address.address().script().unwrap();

let value = BASE_FEE.checked_mul_u32(10000).unwrap();
Expand Down Expand Up @@ -710,6 +707,6 @@ data_point_source_custom_script: ~
let prepare =
PrepareUpdate::new(prepare_update_input, &old_pool_config, &old_oracle_config).unwrap();
let (new_pool_config, _) = prepare.execute(state).unwrap();
assert!(new_pool_config.token_ids != old_pool_config.token_ids);
assert_ne!(new_pool_config.token_ids, old_pool_config.token_ids);
}
}
8 changes: 3 additions & 5 deletions core/src/cli_commands/transfer_oracle_token.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,9 @@ pub fn transfer_oracle_token(
) -> Result<(), anyhow::Error> {
let rewards_destination =
AddressEncoder::unchecked_parse_network_address_from_str(&rewards_destination_str)?;
let oracle_address = ORACLE_CONFIG.oracle_address.clone();
let (change_address, network_prefix) = {
let net_address = ORACLE_CONFIG.change_address.clone().unwrap();
(net_address.address(), net_address.network())
};
let oracle_address = ORACLE_CONFIG.get_oracle_address().clone();
let change_address = ORACLE_CONFIG.get_change_address().clone().address();
let network_prefix = ORACLE_CONFIG.get_network_prefix();
let context = build_transfer_oracle_token_tx(
local_datapoint_box_source,
node_api,
Expand Down
8 changes: 3 additions & 5 deletions core/src/cli_commands/update_pool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,9 @@ pub fn update_pool(
"Reward token id in pool_config_updated.yaml does not match the one from the command line"
);
}
let oracle_address = ORACLE_CONFIG.oracle_address.clone();
let (change_address, network_prefix) = {
let net_addr = ORACLE_CONFIG.change_address.clone().unwrap();
(net_addr.address(), net_addr.network())
};
let oracle_address = ORACLE_CONFIG.get_oracle_address().clone();
let change_address = ORACLE_CONFIG.get_change_address().clone().address();
let network_prefix = ORACLE_CONFIG.get_network_prefix();

let new_pool_contract =
PoolContract::checked_load(&new_pool_config.pool_box_wrapper_inputs.contract_inputs)?;
Expand Down
15 changes: 7 additions & 8 deletions core/src/cli_commands/vote_update_pool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,16 +68,15 @@ pub fn vote_update_pool(
height: BlockHeight,
ballot_contract: &BallotContract,
) -> Result<(), anyhow::Error> {
let oracle_address = ORACLE_CONFIG.oracle_address.clone();
let change_network_address = ORACLE_CONFIG.change_address.clone().unwrap();
let oracle_address = ORACLE_CONFIG.get_oracle_address().clone();
let change_network_address = ORACLE_CONFIG.get_change_address().clone();
let network_prefix = change_network_address.network();
let new_pool_box_address_hash = Digest32::try_from(new_pool_box_address_hash_str)?;
let ballot_token_owner =
if let Address::P2Pk(ballot_token_owner) = ORACLE_CONFIG.oracle_address.address() {
ballot_token_owner.h
} else {
return Err(VoteUpdatePoolError::IncorrectBallotTokenOwnerAddress.into());
};
let ballot_token_owner = if let Address::P2Pk(ballot_token_owner) = oracle_address.address() {
ballot_token_owner.h
} else {
return Err(VoteUpdatePoolError::IncorrectBallotTokenOwnerAddress.into());
};
let context = if let Some(local_ballot_box) = local_ballot_box_source.get_ballot_box()? {
log::debug!("Found local ballot box");
// Note: the ballot box contains the ballot token, but the box is guarded by the contract,
Expand Down
2 changes: 1 addition & 1 deletion core/src/explorer_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ pub fn wait_for_tx_confirmation(tx_id: TxId) {
}

pub fn wait_for_txs_confirmation(tx_ids: Vec<TxId>) {
let network = ORACLE_CONFIG.oracle_address.network();
let network = ORACLE_CONFIG.get_network_prefix();
let timeout = Duration::from_secs(1200);
let explorer_url = ORACLE_CONFIG
.explorer_url
Expand Down
10 changes: 3 additions & 7 deletions core/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -274,14 +274,15 @@ fn main() {
log_on_launch();
let node_api = NodeApi::new(&ORACLE_CONFIG.node_url);

let _ = node_api.get_wallet();
if !node_api.node.indexer_status().unwrap().is_active {
error!("Blockchain indexer is not active on the node");
std::process::exit(exitcode::SOFTWARE);
}
let _ = node_api.wait_for_indexer_sync();

let change_address = ORACLE_CONFIG.change_address.clone().unwrap();
let network_prefix = change_address.network();
let change_address = ORACLE_CONFIG.get_change_address().clone();
let network_prefix = ORACLE_CONFIG.get_network_prefix();

#[allow(clippy::wildcard_enum_match_arm)]
match args.command {
Expand Down Expand Up @@ -574,11 +575,6 @@ fn log_and_continue_if_non_fatal(

fn log_on_launch() {
log::info!("{}", APP_VERSION);
let oracle_address_opt = ORACLE_CONFIG_OPT.as_ref().map(|c| c.oracle_address.clone());
if let Ok(oracle_address) = oracle_address_opt {
// log::info!("Token ids: {:?}", config.token_ids);
log::info!("Oracle address: {}", oracle_address.to_base58());
}
}

fn check_reward_token_opt(
Expand Down
4 changes: 2 additions & 2 deletions core/src/metrics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ pub fn update_metrics(
node_api: &NodeApi,
) -> Result<(), anyhow::Error> {
let current_height = (node_api.node.current_block_height()? as u32).into();
let network_prefix = ORACLE_CONFIG.change_address.clone().unwrap().network();
let network_prefix = ORACLE_CONFIG.get_network_prefix();
let pool_box = &oracle_pool.get_pool_box_source().get_pool_box()?;
{
let rate = pool_box.rate();
Expand All @@ -362,7 +362,7 @@ pub fn update_metrics(
update_oracle_health(&oracle_health);
let wallet_balance: i64 = node_api
.node
.nano_ergs_balance(&ORACLE_CONFIG.oracle_address.to_base58())?
.nano_ergs_balance(&ORACLE_CONFIG.get_oracle_address().to_base58())?
as i64;
ORACLE_NODE_WALLET_BALANCE.set(wallet_balance);
POOL_BOX_REWARD_TOKEN_AMOUNT.set(pool_box.reward_token().amount.into());
Expand Down
9 changes: 2 additions & 7 deletions core/src/node_interface/node_api.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
use crate::oracle_config::ORACLE_SECRETS;
use crate::oracle_config::ORACLE_CONFIG;
use ergo_lib::chain::ergo_state_context::ErgoStateContext;
use ergo_lib::chain::transaction::unsigned::UnsignedTransaction;
use ergo_lib::chain::transaction::{Transaction, TxId};
use ergo_lib::ergotree_ir::chain::address::AddressEncoderError;
use ergo_lib::ergotree_ir::chain::ergo_box::box_value::BoxValue;
use ergo_lib::ergotree_ir::chain::ergo_box::ErgoBox;
use ergo_lib::ergotree_ir::chain::token::{Token, TokenId};
Expand Down Expand Up @@ -260,7 +259,7 @@ impl NodeApi {

/// Get the wallet instance from the oracle secrets.
pub fn get_wallet(&self) -> Result<Wallet, NodeApiError> {
let secret = ORACLE_SECRETS.secret_key.clone();
let secret = ORACLE_CONFIG.get_oracle_secret_key();
Ok(Wallet::from_secrets(vec![secret]))
}

Expand Down Expand Up @@ -328,8 +327,4 @@ pub enum NodeApiError {
NodeInterfaceError(#[from] NodeError),
#[error("Wallet error: {0}")]
WalletError(#[from] WalletError),
#[error("AddressEncoder error: {0}")]
AddressEncoderError(#[from] AddressEncoderError),
#[error("no change address is set in node")]
NoChangeAddressSetInNode,
}
Loading
Loading