@@ -437,44 +437,38 @@ impl<'a> StacksMicroblockBuilder<'a> {
437
437
let mut bytes_so_far = self . runtime . bytes_so_far ;
438
438
let mut num_txs = self . runtime . num_mined ;
439
439
440
- let result = mem_pool. iterate_candidates (
441
- & self . anchor_block_consensus_hash ,
442
- & self . anchor_block ,
443
- self . anchor_block_height ,
444
- & mut self . header_reader ,
445
- |micro_txs| {
446
- let mut result = Ok ( ( ) ) ;
447
- for mempool_tx in micro_txs. into_iter ( ) {
448
- match StacksMicroblockBuilder :: mine_next_transaction (
449
- & mut clarity_tx,
450
- mempool_tx. tx . clone ( ) ,
451
- mempool_tx. metadata . len ,
452
- & mut considered,
453
- bytes_so_far,
454
- ) {
455
- Ok ( true ) => {
456
- bytes_so_far += mempool_tx. metadata . len ;
457
-
458
- debug ! (
459
- "Include tx {} ({}) in microblock" ,
460
- mempool_tx. tx. txid( ) ,
461
- mempool_tx. tx. payload. name( )
462
- ) ;
463
- txs_included. push ( mempool_tx. tx ) ;
464
- num_txs += 1 ;
465
- }
466
- Ok ( false ) => {
467
- continue ;
468
- }
469
- Err ( e) => {
470
- result = Err ( e) ;
471
- break ;
472
- }
440
+ let result = mem_pool. iterate_candidates ( self . anchor_block_height , |micro_txs| {
441
+ let mut result = Ok ( ( ) ) ;
442
+ for mempool_tx in micro_txs. into_iter ( ) {
443
+ match StacksMicroblockBuilder :: mine_next_transaction (
444
+ & mut clarity_tx,
445
+ mempool_tx. tx . clone ( ) ,
446
+ mempool_tx. metadata . len ,
447
+ & mut considered,
448
+ bytes_so_far,
449
+ ) {
450
+ Ok ( true ) => {
451
+ bytes_so_far += mempool_tx. metadata . len ;
452
+
453
+ debug ! (
454
+ "Include tx {} ({}) in microblock" ,
455
+ mempool_tx. tx. txid( ) ,
456
+ mempool_tx. tx. payload. name( )
457
+ ) ;
458
+ txs_included. push ( mempool_tx. tx ) ;
459
+ num_txs += 1 ;
460
+ }
461
+ Ok ( false ) => {
462
+ continue ;
463
+ }
464
+ Err ( e) => {
465
+ result = Err ( e) ;
466
+ break ;
473
467
}
474
468
}
475
- result
476
- } ,
477
- ) ;
469
+ }
470
+ result
471
+ } ) ;
478
472
479
473
// do fault injection
480
474
if self . runtime . disable_bytes_check {
@@ -1389,7 +1383,6 @@ impl StacksBlockBuilder {
1389
1383
& tip_consensus_hash, & tip_block_hash, tip_height, execution_budget
1390
1384
) ;
1391
1385
1392
- let ( mut header_reader_chainstate, _) = chainstate_handle. reopen ( ) ?; // used for reading block headers during an epoch
1393
1386
let ( mut chainstate, _) = chainstate_handle. reopen_limited ( execution_budget) ?; // used for processing a block up to the given limit
1394
1387
1395
1388
let mut builder = StacksBlockBuilder :: make_block_builder (
@@ -1413,86 +1406,80 @@ impl StacksBlockBuilder {
1413
1406
1414
1407
let mut block_limit_hit = BlockLimitFunction :: NO_LIMIT_HIT ;
1415
1408
1416
- let result = mempool. iterate_candidates (
1417
- & tip_consensus_hash,
1418
- & tip_block_hash,
1419
- tip_height,
1420
- & mut header_reader_chainstate,
1421
- |available_txs| {
1422
- if block_limit_hit == BlockLimitFunction :: LIMIT_REACHED {
1423
- return Ok ( ( ) ) ;
1424
- }
1409
+ let result = mempool. iterate_candidates ( tip_height, |available_txs| {
1410
+ if block_limit_hit == BlockLimitFunction :: LIMIT_REACHED {
1411
+ return Ok ( ( ) ) ;
1412
+ }
1425
1413
1426
- for txinfo in available_txs. into_iter ( ) {
1427
- // skip transactions early if we can
1428
- if considered. contains ( & txinfo. tx . txid ( ) ) {
1414
+ for txinfo in available_txs. into_iter ( ) {
1415
+ // skip transactions early if we can
1416
+ if considered. contains ( & txinfo. tx . txid ( ) ) {
1417
+ continue ;
1418
+ }
1419
+ if let Some ( nonce) = mined_origin_nonces. get ( & txinfo. tx . origin_address ( ) ) {
1420
+ if * nonce >= txinfo. tx . get_origin_nonce ( ) {
1429
1421
continue ;
1430
1422
}
1431
- if let Some ( nonce) = mined_origin_nonces. get ( & txinfo. tx . origin_address ( ) ) {
1432
- if * nonce >= txinfo. tx . get_origin_nonce ( ) {
1433
- continue ;
1434
- }
1435
- }
1436
- if let Some ( sponsor_addr) = txinfo. tx . sponsor_address ( ) {
1437
- if let Some ( nonce) = mined_sponsor_nonces. get ( & sponsor_addr) {
1438
- if let Some ( sponsor_nonce) = txinfo. tx . get_sponsor_nonce ( ) {
1439
- if * nonce >= sponsor_nonce {
1440
- continue ;
1441
- }
1423
+ }
1424
+ if let Some ( sponsor_addr) = txinfo. tx . sponsor_address ( ) {
1425
+ if let Some ( nonce) = mined_sponsor_nonces. get ( & sponsor_addr) {
1426
+ if let Some ( sponsor_nonce) = txinfo. tx . get_sponsor_nonce ( ) {
1427
+ if * nonce >= sponsor_nonce {
1428
+ continue ;
1442
1429
}
1443
1430
}
1444
1431
}
1432
+ }
1445
1433
1446
- considered. insert ( txinfo. tx . txid ( ) ) ;
1447
-
1448
- match builder. try_mine_tx_with_len (
1449
- & mut epoch_tx,
1450
- & txinfo. tx ,
1451
- txinfo. metadata . len ,
1452
- & block_limit_hit,
1453
- ) {
1454
- Ok ( _) => { }
1455
- Err ( Error :: BlockTooBigError ) => {
1456
- // done mining -- our execution budget is exceeded.
1457
- // Make the block from the transactions we did manage to get
1458
- debug ! ( "Block budget exceeded on tx {}" , & txinfo. tx. txid( ) ) ;
1459
- if block_limit_hit == BlockLimitFunction :: NO_LIMIT_HIT {
1460
- block_limit_hit = BlockLimitFunction :: CONTRACT_LIMIT_HIT ;
1461
- continue ;
1462
- } else if block_limit_hit == BlockLimitFunction :: CONTRACT_LIMIT_HIT {
1463
- block_limit_hit = BlockLimitFunction :: LIMIT_REACHED ;
1464
- }
1465
- }
1466
- Err ( Error :: TransactionTooBigError ) => {
1467
- invalidated_txs. push ( txinfo. metadata . txid ) ;
1468
- if block_limit_hit == BlockLimitFunction :: NO_LIMIT_HIT {
1469
- block_limit_hit = BlockLimitFunction :: CONTRACT_LIMIT_HIT ;
1470
- continue ;
1471
- } else if block_limit_hit == BlockLimitFunction :: CONTRACT_LIMIT_HIT {
1472
- block_limit_hit = BlockLimitFunction :: LIMIT_REACHED ;
1473
- }
1474
- }
1475
- Err ( Error :: InvalidStacksTransaction ( _, true ) ) => {
1476
- // if we have an invalid transaction that was quietly ignored, don't warn here either
1434
+ considered. insert ( txinfo. tx . txid ( ) ) ;
1435
+
1436
+ match builder. try_mine_tx_with_len (
1437
+ & mut epoch_tx,
1438
+ & txinfo. tx ,
1439
+ txinfo. metadata . len ,
1440
+ & block_limit_hit,
1441
+ ) {
1442
+ Ok ( _) => { }
1443
+ Err ( Error :: BlockTooBigError ) => {
1444
+ // done mining -- our execution budget is exceeded.
1445
+ // Make the block from the transactions we did manage to get
1446
+ debug ! ( "Block budget exceeded on tx {}" , & txinfo. tx. txid( ) ) ;
1447
+ if block_limit_hit == BlockLimitFunction :: NO_LIMIT_HIT {
1448
+ block_limit_hit = BlockLimitFunction :: CONTRACT_LIMIT_HIT ;
1477
1449
continue ;
1450
+ } else if block_limit_hit == BlockLimitFunction :: CONTRACT_LIMIT_HIT {
1451
+ block_limit_hit = BlockLimitFunction :: LIMIT_REACHED ;
1478
1452
}
1479
- Err ( e) => {
1480
- warn ! ( "Failed to apply tx {}: {:?}" , & txinfo. tx. txid( ) , & e) ;
1453
+ }
1454
+ Err ( Error :: TransactionTooBigError ) => {
1455
+ invalidated_txs. push ( txinfo. metadata . txid ) ;
1456
+ if block_limit_hit == BlockLimitFunction :: NO_LIMIT_HIT {
1457
+ block_limit_hit = BlockLimitFunction :: CONTRACT_LIMIT_HIT ;
1481
1458
continue ;
1459
+ } else if block_limit_hit == BlockLimitFunction :: CONTRACT_LIMIT_HIT {
1460
+ block_limit_hit = BlockLimitFunction :: LIMIT_REACHED ;
1482
1461
}
1483
1462
}
1484
-
1485
- mined_origin_nonces
1486
- . insert ( txinfo . tx . origin_address ( ) , txinfo . tx . get_origin_nonce ( ) ) ;
1487
- if let ( Some ( sponsor_addr ) , Some ( sponsor_nonce ) ) =
1488
- ( txinfo . tx . sponsor_address ( ) , txinfo . tx . get_sponsor_nonce ( ) )
1489
- {
1490
- mined_sponsor_nonces . insert ( sponsor_addr , sponsor_nonce ) ;
1463
+ Err ( Error :: InvalidStacksTransaction ( _ , true ) ) => {
1464
+ // if we have an invalid transaction that was quietly ignored, don't warn here either
1465
+ continue ;
1466
+ }
1467
+ Err ( e ) => {
1468
+ warn ! ( "Failed to apply tx {}: {:?}" , & txinfo . tx . txid ( ) , & e ) ;
1469
+ continue ;
1491
1470
}
1492
1471
}
1493
- Ok ( ( ) )
1494
- } ,
1495
- ) ;
1472
+
1473
+ mined_origin_nonces
1474
+ . insert ( txinfo. tx . origin_address ( ) , txinfo. tx . get_origin_nonce ( ) ) ;
1475
+ if let ( Some ( sponsor_addr) , Some ( sponsor_nonce) ) =
1476
+ ( txinfo. tx . sponsor_address ( ) , txinfo. tx . get_sponsor_nonce ( ) )
1477
+ {
1478
+ mined_sponsor_nonces. insert ( sponsor_addr, sponsor_nonce) ;
1479
+ }
1480
+ }
1481
+ Ok ( ( ) )
1482
+ } ) ;
1496
1483
1497
1484
mempool. drop_txs ( & invalidated_txs) ?;
1498
1485
if let Some ( observer) = event_observer {
0 commit comments