@@ -41,6 +41,7 @@ use stacks::net::p2p::NetworkHandle;
41
41
use stacks:: net:: stackerdb:: StackerDBs ;
42
42
use stacks:: net:: { NakamotoBlocksData , StacksMessageType } ;
43
43
use stacks:: util:: get_epoch_time_secs;
44
+ use stacks:: util:: secp256k1:: MessageSignature ;
44
45
use stacks_common:: types:: chainstate:: { StacksAddress , StacksBlockId } ;
45
46
use stacks_common:: types:: { PrivateKey , StacksEpochId } ;
46
47
use stacks_common:: util:: vrf:: VRFProof ;
@@ -422,64 +423,48 @@ impl BlockMinerThread {
422
423
423
424
if let Some ( mut new_block) = new_block {
424
425
Self :: fault_injection_block_broadcast_stall ( & new_block) ;
425
-
426
- let signer_signature = if self . config . get_node_config ( false ) . mock_mining {
427
- // If we're mock mining, we don't actually propose the block.
428
- Vec :: new ( )
429
- } else {
430
- let mut chain_state = neon_node:: open_chainstate_with_faults ( & self . config )
431
- . map_err ( |e| {
432
- NakamotoNodeError :: SigningCoordinatorFailure ( format ! (
433
- "Failed to open chainstate DB. Cannot mine! {e:?}"
434
- ) )
435
- } ) ?;
436
- match coordinator. propose_block (
437
- & mut new_block,
438
- & self . burn_block ,
439
- & self . burnchain ,
440
- & sortdb,
441
- & mut chain_state,
442
- stackerdbs,
443
- & self . globals . counters ,
444
- & self . burn_election_block . consensus_hash ,
445
- ) {
446
- Ok ( x) => x,
447
- Err ( e) => match e {
448
- NakamotoNodeError :: StacksTipChanged => {
449
- info ! ( "Stacks tip changed while waiting for signatures" ;
450
- "signer_sighash" => %new_block. header. signer_signature_hash( ) ,
451
- "block_height" => new_block. header. chain_length,
452
- "consensus_hash" => %new_block. header. consensus_hash,
453
- ) ;
454
- return Err ( e) ;
455
- }
456
- NakamotoNodeError :: BurnchainTipChanged => {
457
- info ! ( "Burnchain tip changed while waiting for signatures" ;
458
- "signer_sighash" => %new_block. header. signer_signature_hash( ) ,
459
- "block_height" => new_block. header. chain_length,
460
- "consensus_hash" => %new_block. header. consensus_hash,
461
- ) ;
462
- return Err ( e) ;
463
- }
464
- _ => {
465
- // Sleep for a bit to allow signers to catch up
466
- let pause_ms = if * last_block_rejected {
467
- self . config . miner . subsequent_rejection_pause_ms
468
- } else {
469
- self . config . miner . first_rejection_pause_ms
470
- } ;
471
-
472
- error ! ( "Error while gathering signatures: {e:?}. Will try mining again in {pause_ms}." ;
473
- "signer_sighash" => %new_block. header. signer_signature_hash( ) ,
474
- "block_height" => new_block. header. chain_length,
475
- "consensus_hash" => %new_block. header. consensus_hash,
476
- ) ;
477
- thread:: sleep ( Duration :: from_millis ( pause_ms) ) ;
478
- * last_block_rejected = true ;
479
- return Ok ( ( ) ) ;
480
- }
481
- } ,
482
- }
426
+ let signer_signature = match self . propose_block (
427
+ coordinator,
428
+ & mut new_block,
429
+ sortdb,
430
+ stackerdbs,
431
+ ) {
432
+ Ok ( x) => x,
433
+ Err ( e) => match e {
434
+ NakamotoNodeError :: StacksTipChanged => {
435
+ info ! ( "Stacks tip changed while waiting for signatures" ;
436
+ "signer_sighash" => %new_block. header. signer_signature_hash( ) ,
437
+ "block_height" => new_block. header. chain_length,
438
+ "consensus_hash" => %new_block. header. consensus_hash,
439
+ ) ;
440
+ return Err ( e) ;
441
+ }
442
+ NakamotoNodeError :: BurnchainTipChanged => {
443
+ info ! ( "Burnchain tip changed while waiting for signatures" ;
444
+ "signer_sighash" => %new_block. header. signer_signature_hash( ) ,
445
+ "block_height" => new_block. header. chain_length,
446
+ "consensus_hash" => %new_block. header. consensus_hash,
447
+ ) ;
448
+ return Err ( e) ;
449
+ }
450
+ _ => {
451
+ // Sleep for a bit to allow signers to catch up
452
+ let pause_ms = if * last_block_rejected {
453
+ self . config . miner . subsequent_rejection_pause_ms
454
+ } else {
455
+ self . config . miner . first_rejection_pause_ms
456
+ } ;
457
+
458
+ error ! ( "Error while gathering signatures: {e:?}. Will try mining again in {pause_ms}." ;
459
+ "signer_sighash" => %new_block. header. signer_signature_hash( ) ,
460
+ "block_height" => new_block. header. chain_length,
461
+ "consensus_hash" => %new_block. header. consensus_hash,
462
+ ) ;
463
+ thread:: sleep ( Duration :: from_millis ( pause_ms) ) ;
464
+ * last_block_rejected = true ;
465
+ return Ok ( ( ) ) ;
466
+ }
467
+ } ,
483
468
} ;
484
469
* last_block_rejected = false ;
485
470
@@ -533,6 +518,36 @@ impl BlockMinerThread {
533
518
Ok ( ( ) )
534
519
}
535
520
521
+ fn propose_block (
522
+ & self ,
523
+ coordinator : & mut SignerCoordinator ,
524
+ new_block : & mut NakamotoBlock ,
525
+ sortdb : & SortitionDB ,
526
+ stackerdbs : & mut StackerDBs ,
527
+ ) -> Result < Vec < MessageSignature > , NakamotoNodeError > {
528
+ if self . config . get_node_config ( false ) . mock_mining {
529
+ // If we're mock mining, we don't actually propose the block.
530
+ return Ok ( Vec :: new ( ) ) ;
531
+ }
532
+
533
+ let mut chain_state =
534
+ neon_node:: open_chainstate_with_faults ( & self . config ) . map_err ( |e| {
535
+ NakamotoNodeError :: SigningCoordinatorFailure ( format ! (
536
+ "Failed to open chainstate DB. Cannot mine! {e:?}"
537
+ ) )
538
+ } ) ?;
539
+ coordinator. propose_block (
540
+ new_block,
541
+ & self . burn_block ,
542
+ & self . burnchain ,
543
+ sortdb,
544
+ & mut chain_state,
545
+ stackerdbs,
546
+ & self . globals . counters ,
547
+ & self . burn_election_block . consensus_hash ,
548
+ )
549
+ }
550
+
536
551
/// Load the signer set active for this miner's blocks. This is the
537
552
/// active reward set during `self.burn_election_block`. The miner
538
553
/// thread caches this information, and this method will consult
0 commit comments