@@ -44,7 +44,9 @@ use crate::{
4444 merkle_root:: merkle_root_from_path,
4545 server:: {
4646 error:: ExtendedChannelError ,
47- jobs:: { extended:: ExtendedJob , factory:: JobFactory , job_store:: JobStore , JobOrigin } ,
47+ jobs:: {
48+ extended:: ExtendedJob , factory:: JobFactoryExtended , job_store:: JobStore , JobOrigin ,
49+ } ,
4850 share_accounting:: { ShareAccounting , ShareValidationError , ShareValidationResult } ,
4951 } ,
5052 target:: { bytes_to_hex, hash_rate_to_target, u256_to_block_hash} ,
@@ -83,9 +85,11 @@ use tracing::debug;
8385/// - the channel's job factory
8486/// - the channel's chain tip
8587#[ derive( Debug ) ]
86- pub struct ExtendedChannel < ' a , J >
88+ pub struct ExtendedChannel < ' a , J , E , F >
8789where
88- J : JobStore < ExtendedJob < ' a > > ,
90+ E : ExtendedJob < ' a > ,
91+ F : JobFactoryExtended < ' a , E > ,
92+ J : JobStore < E > ,
8993{
9094 channel_id : u32 ,
9195 user_identity : String ,
@@ -95,16 +99,18 @@ where
9599 target : Target , // todo: try to use Target from rust-bitcoin
96100 nominal_hashrate : f32 ,
97101 job_store : J ,
98- job_factory : JobFactory ,
102+ job_factory : F ,
99103 share_accounting : ShareAccounting ,
100104 expected_share_per_minute : f32 ,
101105 chain_tip : Option < ChainTip > ,
102- phantom : PhantomData < & ' a ( ) > ,
106+ phantom : PhantomData < ( E , & ' a ( ) ) > ,
103107}
104108
105- impl < ' a , J > ExtendedChannel < ' a , J >
109+ impl < ' a , J , E , F > ExtendedChannel < ' a , J , E , F >
106110where
107- J : JobStore < ExtendedJob < ' a > > ,
111+ E : ExtendedJob < ' a > ,
112+ F : JobFactoryExtended < ' a , E > ,
113+ J : JobStore < E > ,
108114{
109115 /// Constructor of `ExtendedChannel` for a Sv2 Pool Server.
110116 /// Not meant for usage on a Sv2 Job Declaration Client.
@@ -243,7 +249,7 @@ where
243249 target,
244250 nominal_hashrate,
245251 job_store,
246- job_factory : JobFactory :: new ( version_rolling_allowed, pool_tag, miner_tag) ,
252+ job_factory : F :: new_factory_extended ( version_rolling_allowed, pool_tag, miner_tag) ,
247253 share_accounting : ShareAccounting :: new ( share_batch_size) ,
248254 expected_share_per_minute,
249255 chain_tip : None ,
@@ -408,19 +414,19 @@ where
408414 }
409415
410416 /// Returns an owned copy of the currently active job, if any.
411- pub fn get_active_job ( & self ) -> Option < ExtendedJob < ' a > > {
417+ pub fn get_active_job ( & self ) -> Option < E > {
412418 // cloning happens inside the job store
413419 self . job_store . get_active_job ( )
414420 }
415421
416422 /// Returns an owned copy of a future job from its job ID, if any.
417- pub fn get_future_job ( & self , job_id : u32 ) -> Option < ExtendedJob < ' a > > {
423+ pub fn get_future_job ( & self , job_id : u32 ) -> Option < E > {
418424 // cloning happens inside the job store
419425 self . job_store . get_future_job ( job_id)
420426 }
421427
422428 /// Returns an owned copy of a past job from its job ID, if any.
423- pub fn get_past_job ( & self , job_id : u32 ) -> Option < ExtendedJob < ' a > > {
429+ pub fn get_past_job ( & self , job_id : u32 ) -> Option < E > {
424430 // cloning happens inside the job store
425431 self . job_store . get_past_job ( job_id)
426432 }
@@ -738,7 +744,12 @@ mod tests {
738744 server:: {
739745 error:: ExtendedChannelError ,
740746 extended:: ExtendedChannel ,
741- jobs:: job_store:: { DefaultJobStore , JobStore } ,
747+ jobs:: {
748+ extended:: { DefaultExtendedJob , ExtendedJob } ,
749+ factory:: DefaultJobFactory ,
750+ job_store:: { DefaultJobStore , JobStore } ,
751+ Job ,
752+ } ,
742753 share_accounting:: { ShareValidationError , ShareValidationResult } ,
743754 } ,
744755 } ;
@@ -768,9 +779,14 @@ mod tests {
768779 let version_rolling_allowed = true ;
769780 let rollable_extranonce_size = 4u16 ;
770781 let share_batch_size = 100 ;
771- let job_store = DefaultJobStore :: new ( ) ;
772-
773- let mut channel = ExtendedChannel :: new (
782+ let job_store: DefaultJobStore < DefaultExtendedJob > = DefaultJobStore :: new ( ) ;
783+
784+ let mut channel: ExtendedChannel <
785+ ' _ ,
786+ DefaultJobStore < DefaultExtendedJob > ,
787+ DefaultExtendedJob ,
788+ DefaultJobFactory ,
789+ > = ExtendedChannel :: new (
774790 channel_id,
775791 user_identity,
776792 extranonce_prefix,
@@ -914,9 +930,14 @@ mod tests {
914930 let version_rolling_allowed = true ;
915931 let rollable_extranonce_size = 4u16 ;
916932 let share_batch_size = 100 ;
917- let job_store = DefaultJobStore :: new ( ) ;
918-
919- let mut channel = ExtendedChannel :: new (
933+ let job_store: DefaultJobStore < DefaultExtendedJob > = DefaultJobStore :: new ( ) ;
934+
935+ let mut channel: ExtendedChannel <
936+ ' _ ,
937+ DefaultJobStore < DefaultExtendedJob > ,
938+ DefaultExtendedJob ,
939+ DefaultJobFactory ,
940+ > = ExtendedChannel :: new (
920941 channel_id,
921942 user_identity,
922943 extranonce_prefix,
@@ -1034,9 +1055,14 @@ mod tests {
10341055 let version_rolling_allowed = true ;
10351056 let rollable_extranonce_size = 4u16 ;
10361057 let share_batch_size = 100 ;
1037- let job_store = DefaultJobStore :: new ( ) ;
1038-
1039- let mut channel = ExtendedChannel :: new (
1058+ let job_store: DefaultJobStore < DefaultExtendedJob > = DefaultJobStore :: new ( ) ;
1059+
1060+ let mut channel: ExtendedChannel <
1061+ ' _ ,
1062+ DefaultJobStore < DefaultExtendedJob > ,
1063+ DefaultExtendedJob ,
1064+ DefaultJobFactory ,
1065+ > = ExtendedChannel :: new (
10401066 channel_id,
10411067 user_identity,
10421068 extranonce_prefix,
@@ -1112,9 +1138,14 @@ mod tests {
11121138 let version_rolling_allowed = true ;
11131139 let rollable_extranonce_size = 8u16 ;
11141140 let share_batch_size = 100 ;
1115- let job_store = DefaultJobStore :: new ( ) ;
1116-
1117- let mut channel = ExtendedChannel :: new (
1141+ let job_store: DefaultJobStore < DefaultExtendedJob > = DefaultJobStore :: new ( ) ;
1142+
1143+ let mut channel: ExtendedChannel <
1144+ ' _ ,
1145+ DefaultJobStore < DefaultExtendedJob > ,
1146+ DefaultExtendedJob ,
1147+ DefaultJobFactory ,
1148+ > = ExtendedChannel :: new (
11181149 channel_id,
11191150 user_identity,
11201151 extranonce_prefix,
@@ -1224,9 +1255,14 @@ mod tests {
12241255 let version_rolling_allowed = true ;
12251256 let rollable_extranonce_size = 8u16 ;
12261257 let share_batch_size = 100 ;
1227- let job_store = DefaultJobStore :: new ( ) ;
1228-
1229- let mut channel = ExtendedChannel :: new (
1258+ let job_store: DefaultJobStore < DefaultExtendedJob > = DefaultJobStore :: new ( ) ;
1259+
1260+ let mut channel: ExtendedChannel <
1261+ ' _ ,
1262+ DefaultJobStore < DefaultExtendedJob > ,
1263+ DefaultExtendedJob ,
1264+ DefaultJobFactory ,
1265+ > = ExtendedChannel :: new (
12301266 channel_id,
12311267 user_identity,
12321268 extranonce_prefix,
@@ -1336,9 +1372,14 @@ mod tests {
13361372 let version_rolling_allowed = true ;
13371373 let rollable_extranonce_size = 8u16 ;
13381374 let share_batch_size = 100 ;
1339- let job_store = DefaultJobStore :: new ( ) ;
1340-
1341- let mut channel = ExtendedChannel :: new (
1375+ let job_store: DefaultJobStore < DefaultExtendedJob > = DefaultJobStore :: new ( ) ;
1376+
1377+ let mut channel: ExtendedChannel <
1378+ ' _ ,
1379+ DefaultJobStore < DefaultExtendedJob > ,
1380+ DefaultExtendedJob ,
1381+ DefaultJobFactory ,
1382+ > = ExtendedChannel :: new (
13421383 channel_id,
13431384 user_identity,
13441385 extranonce_prefix,
@@ -1459,13 +1500,18 @@ mod tests {
14591500 let version_rolling_allowed = true ;
14601501 let rollable_extranonce_size = 4u16 ;
14611502 let share_batch_size = 100 ;
1462- let job_store = DefaultJobStore :: new ( ) ;
1503+ let job_store: DefaultJobStore < DefaultExtendedJob > = DefaultJobStore :: new ( ) ;
14631504
14641505 // this is the most permissive possible max_target
14651506 let max_target = Target :: from_le_bytes ( [ 0xff ; 32 ] ) ;
14661507
14671508 // Create a channel with initial hashrate
1468- let mut channel = ExtendedChannel :: new (
1509+ let mut channel: ExtendedChannel <
1510+ ' _ ,
1511+ DefaultJobStore < DefaultExtendedJob > ,
1512+ DefaultExtendedJob ,
1513+ DefaultJobFactory ,
1514+ > = ExtendedChannel :: new (
14691515 channel_id,
14701516 user_identity,
14711517 extranonce_prefix,
@@ -1550,9 +1596,14 @@ mod tests {
15501596 let version_rolling_allowed = true ;
15511597 let rollable_extranonce_size = 4u16 ;
15521598 let share_batch_size = 100 ;
1553- let job_store = DefaultJobStore :: new ( ) ;
1554-
1555- let mut channel = ExtendedChannel :: new (
1599+ let job_store: DefaultJobStore < DefaultExtendedJob > = DefaultJobStore :: new ( ) ;
1600+
1601+ let mut channel: ExtendedChannel <
1602+ ' _ ,
1603+ DefaultJobStore < DefaultExtendedJob > ,
1604+ DefaultExtendedJob ,
1605+ DefaultJobFactory ,
1606+ > = ExtendedChannel :: new (
15561607 channel_id,
15571608 user_identity,
15581609 extranonce_prefix. clone ( ) ,
0 commit comments