Skip to content

Commit 21db264

Browse files
committed
Add MiningRules and wire it up
1 parent a73f63a commit 21db264

File tree

11 files changed

+56
-2
lines changed

11 files changed

+56
-2
lines changed

consensus/core/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ pub mod hashing;
2727
pub mod header;
2828
pub mod mass;
2929
pub mod merkle;
30+
pub mod mining_rules;
3031
pub mod muhash;
3132
pub mod network;
3233
pub mod pruning;

consensus/core/src/mining_rules.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#[derive(Debug)]
2+
pub struct MiningRules {}
3+
4+
impl MiningRules {
5+
pub fn new() -> Self {
6+
Self {}
7+
}
8+
}
9+
10+
impl Default for MiningRules {
11+
fn default() -> Self {
12+
Self::new()
13+
}
14+
}

consensus/src/consensus/factory.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use super::utxo_set_override::{set_genesis_utxo_commitment_from_config, set_init
33
use super::{ctl::Ctl, Consensus};
44
use crate::{model::stores::U64Key, pipeline::ProcessingCounters};
55
use itertools::Itertools;
6-
use kaspa_consensus_core::config::Config;
6+
use kaspa_consensus_core::{config::Config, mining_rules::MiningRules};
77
use kaspa_consensus_notify::root::ConsensusNotificationRoot;
88
use kaspa_consensusmanager::{ConsensusFactory, ConsensusInstance, DynConsensusCtl, SessionLock};
99
use kaspa_core::{debug, time::unix_now, warn};
@@ -254,6 +254,7 @@ pub struct Factory {
254254
counters: Arc<ProcessingCounters>,
255255
tx_script_cache_counters: Arc<TxScriptCacheCounters>,
256256
fd_budget: i32,
257+
mining_rules: Arc<MiningRules>,
257258
}
258259

259260
impl Factory {
@@ -266,6 +267,7 @@ impl Factory {
266267
counters: Arc<ProcessingCounters>,
267268
tx_script_cache_counters: Arc<TxScriptCacheCounters>,
268269
fd_budget: i32,
270+
mining_rules: Arc<MiningRules>,
269271
) -> Self {
270272
assert!(fd_budget > 0, "fd_budget has to be positive");
271273
let mut config = config.clone();
@@ -283,6 +285,7 @@ impl Factory {
283285
counters,
284286
tx_script_cache_counters,
285287
fd_budget,
288+
mining_rules,
286289
};
287290
factory.delete_inactive_consensus_entries();
288291
factory
@@ -325,6 +328,7 @@ impl ConsensusFactory for Factory {
325328
self.counters.clone(),
326329
self.tx_script_cache_counters.clone(),
327330
entry.creation_timestamp,
331+
self.mining_rules.clone(),
328332
));
329333

330334
// We write the new active entry only once the instance was created successfully.
@@ -359,6 +363,7 @@ impl ConsensusFactory for Factory {
359363
self.counters.clone(),
360364
self.tx_script_cache_counters.clone(),
361365
entry.creation_timestamp,
366+
self.mining_rules.clone(),
362367
));
363368

364369
(ConsensusInstance::new(session_lock, consensus.clone()), Arc::new(Ctl::new(self.management_store.clone(), db, consensus)))

consensus/src/consensus/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ use kaspa_consensus_core::{
6565
header::Header,
6666
mass::{ContextualMasses, NonContextualMasses},
6767
merkle::calc_hash_merkle_root,
68+
mining_rules::MiningRules,
6869
muhash::MuHashExtensions,
6970
network::NetworkType,
7071
pruning::{PruningPointProof, PruningPointTrustedData, PruningPointsList, PruningProofMetadata},
@@ -162,6 +163,7 @@ impl Consensus {
162163
counters: Arc<ProcessingCounters>,
163164
tx_script_cache_counters: Arc<TxScriptCacheCounters>,
164165
creation_timestamp: u64,
166+
mining_rules: Arc<MiningRules>,
165167
) -> Self {
166168
let params = &config.params;
167169
let perf_params = &config.perf;
@@ -266,6 +268,7 @@ impl Consensus {
266268
pruning_lock.clone(),
267269
notification_root.clone(),
268270
counters.clone(),
271+
mining_rules,
269272
));
270273

271274
let pruning_processor = Arc::new(PruningProcessor::new(

consensus/src/consensus/test_consensus.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use async_channel::Sender;
22
use kaspa_consensus_core::coinbase::MinerData;
3+
use kaspa_consensus_core::mining_rules::MiningRules;
34
use kaspa_consensus_core::tx::ScriptPublicKey;
45
use kaspa_consensus_core::{
56
api::ConsensusApi, block::MutableBlock, blockstatus::BlockStatus, header::Header, merkle::calc_hash_merkle_root,
@@ -58,6 +59,7 @@ impl TestConsensus {
5859
counters,
5960
tx_script_cache_counters,
6061
0,
62+
Arc::new(MiningRules::default()),
6163
));
6264
let block_builder = TestBlockBuilder::new(consensus.virtual_processor.clone());
6365

@@ -78,6 +80,7 @@ impl TestConsensus {
7880
counters,
7981
tx_script_cache_counters,
8082
0,
83+
Arc::new(MiningRules::default()),
8184
));
8285
let block_builder = TestBlockBuilder::new(consensus.virtual_processor.clone());
8386

@@ -99,6 +102,7 @@ impl TestConsensus {
99102
counters,
100103
tx_script_cache_counters,
101104
0,
105+
Arc::new(MiningRules::default()),
102106
));
103107
let block_builder = TestBlockBuilder::new(consensus.virtual_processor.clone());
104108

consensus/src/pipeline/virtual_processor/processor.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ use kaspa_consensus_core::{
6060
},
6161
header::Header,
6262
merkle::calc_hash_merkle_root,
63+
mining_rules::MiningRules,
6364
pruning::PruningPointsList,
6465
tx::{MutableTransaction, Transaction},
6566
utxo::{
@@ -175,6 +176,9 @@ pub struct VirtualStateProcessor {
175176

176177
// Crescendo hardfork activation score (used here for activating KIPs 9,10)
177178
pub(crate) crescendo_activation: ForkActivation,
179+
180+
// Mining Rule
181+
mining_rules: Arc<MiningRules>,
178182
}
179183

180184
impl VirtualStateProcessor {
@@ -191,6 +195,7 @@ impl VirtualStateProcessor {
191195
pruning_lock: SessionLock,
192196
notification_root: Arc<ConsensusNotificationRoot>,
193197
counters: Arc<ProcessingCounters>,
198+
mining_rules: Arc<MiningRules>,
194199
) -> Self {
195200
Self {
196201
receiver,
@@ -240,6 +245,7 @@ impl VirtualStateProcessor {
240245
counters,
241246
crescendo_logger: CrescendoLogger::new(),
242247
crescendo_activation: params.crescendo_activation,
248+
mining_rules,
243249
}
244250
}
245251

kaspad/src/daemon.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use kaspa_consensus_core::{
55
config::ConfigBuilder,
66
constants::TRANSIENT_BYTE_TO_MASS_FACTOR,
77
errors::config::{ConfigError, ConfigResult},
8+
mining_rules::MiningRules,
89
};
910
use kaspa_consensus_notify::{root::ConsensusNotificationRoot, service::NotifyService};
1011
use kaspa_core::{core::Core, debug, info, trace};
@@ -508,6 +509,7 @@ do you confirm? (answer y/n or pass --yes to the Kaspad command line to confirm
508509
let grpc_tower_counters = Arc::new(TowerConnectionCounters::default());
509510

510511
// Use `num_cpus` background threads for the consensus database as recommended by rocksdb
512+
let mining_rules = Arc::new(MiningRules::default());
511513
let consensus_db_parallelism = num_cpus::get();
512514
let consensus_factory = Arc::new(ConsensusFactory::new(
513515
meta_db.clone(),
@@ -518,6 +520,7 @@ do you confirm? (answer y/n or pass --yes to the Kaspad command line to confirm
518520
processing_counters.clone(),
519521
tx_script_cache_counters.clone(),
520522
fd_remaining,
523+
mining_rules.clone(),
521524
));
522525
let consensus_manager = Arc::new(ConsensusManager::new(consensus_factory));
523526
let consensus_monitor = Arc::new(ConsensusMonitor::new(processing_counters.clone(), tick_service.clone()));
@@ -579,6 +582,7 @@ do you confirm? (answer y/n or pass --yes to the Kaspad command line to confirm
579582
processing_counters.clone(),
580583
tick_service.clone(),
581584
hub.clone(),
585+
mining_rules,
582586
));
583587
let flow_context = Arc::new(FlowContext::new(
584588
consensus_manager.clone(),

protocol/mining/src/rule_engine.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use kaspa_consensus_core::{
1010
api::counters::ProcessingCounters,
1111
config::{params::NEW_DIFFICULTY_WINDOW_DURATION, Config},
1212
daa_score_timestamp::DaaScoreTimestamp,
13+
mining_rules::MiningRules,
1314
network::NetworkType::{Mainnet, Testnet},
1415
};
1516
use kaspa_consensusmanager::ConsensusManager;
@@ -35,6 +36,7 @@ pub struct MiningRuleEngine {
3536
use_sync_rate_rule: Arc<AtomicBool>,
3637
consensus_manager: Arc<ConsensusManager>,
3738
hub: Hub,
39+
mining_rules: Arc<MiningRules>,
3840
}
3941

4042
impl MiningRuleEngine {
@@ -44,6 +46,7 @@ impl MiningRuleEngine {
4446
let mut last_snapshot = self.processing_counters.snapshot();
4547
let mut last_log_time = Instant::now();
4648
loop {
49+
// START: Sync monitor
4750
if let TickReason::Shutdown = self.tick_service.tick(Duration::from_secs(snapshot_interval)).await {
4851
// Let the system print final logs before exiting
4952
tokio::time::sleep(Duration::from_millis(500)).await;
@@ -102,6 +105,12 @@ impl MiningRuleEngine {
102105
trace!("Finality period is old. Timestamp: {}. Sync rate: {:.2}", finality_point_timestamp, rate);
103106
}
104107
}
108+
109+
// END - Sync monitor
110+
111+
// START - Rule Engine
112+
trace!("Current Mining Rule: {:?}", self.mining_rules);
113+
// End - Rule Engine
105114
}
106115

107116
last_snapshot = snapshot;
@@ -115,6 +124,7 @@ impl MiningRuleEngine {
115124
processing_counters: Arc<ProcessingCounters>,
116125
tick_service: Arc<TickService>,
117126
hub: Hub,
127+
mining_rules: Arc<MiningRules>,
118128
) -> Self {
119129
Self {
120130
consensus_manager,
@@ -123,6 +133,7 @@ impl MiningRuleEngine {
123133
tick_service,
124134
hub,
125135
use_sync_rate_rule: Arc::new(AtomicBool::new(false)),
136+
mining_rules,
126137
}
127138
}
128139

simpa/src/main.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use kaspa_consensus::{
1717
};
1818
use kaspa_consensus_core::{
1919
api::ConsensusApi, block::Block, blockstatus::BlockStatus, config::bps::calculate_ghostdag_k, errors::block::BlockProcessResult,
20-
BlockHashSet, BlockLevel, HashMapCustomHasher,
20+
mining_rules::MiningRules, BlockHashSet, BlockLevel, HashMapCustomHasher,
2121
};
2222
use kaspa_consensus_notify::root::ConsensusNotificationRoot;
2323
use kaspa_core::{
@@ -240,6 +240,7 @@ fn main_impl(mut args: Args) {
240240
Default::default(),
241241
Default::default(),
242242
unix_now(),
243+
Arc::new(MiningRules::default()),
243244
));
244245
(consensus, lifetime)
245246
} else {
@@ -311,6 +312,7 @@ fn main_impl(mut args: Args) {
311312
Default::default(),
312313
Default::default(),
313314
unix_now(),
315+
Arc::new(MiningRules::default()),
314316
));
315317
let handles2 = consensus2.run_processors();
316318
if args.headers_first {

simpa/src/simulator/network.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use async_channel::unbounded;
2+
use kaspa_consensus_core::mining_rules::MiningRules;
23
use kaspa_consensus_notify::root::ConsensusNotificationRoot;
34
use kaspa_core::time::unix_now;
45
use std::sync::Arc;
@@ -86,6 +87,7 @@ impl KaspaNetworkSimulator {
8687
Default::default(),
8788
Default::default(),
8889
unix_now(),
90+
Arc::new(MiningRules::default()),
8991
));
9092
let handles = consensus.run_processors();
9193
let (sk, pk) = secp.generate_keypair(&mut rng);

0 commit comments

Comments
 (0)