46
46
import org .hyperledger .besu .ethereum .core .Difficulty ;
47
47
import org .hyperledger .besu .ethereum .core .MiningParameters ;
48
48
import org .hyperledger .besu .ethereum .core .PrivacyParameters ;
49
- import org .hyperledger .besu .ethereum .core .Synchronizer ;
50
49
import org .hyperledger .besu .ethereum .eth .EthProtocol ;
51
50
import org .hyperledger .besu .ethereum .eth .EthProtocolConfiguration ;
52
51
import org .hyperledger .besu .ethereum .eth .SnapProtocol ;
77
76
import org .hyperledger .besu .ethereum .eth .transactions .TransactionPool ;
78
77
import org .hyperledger .besu .ethereum .eth .transactions .TransactionPoolConfiguration ;
79
78
import org .hyperledger .besu .ethereum .eth .transactions .TransactionPoolFactory ;
79
+ import org .hyperledger .besu .ethereum .forkid .ForkIdManager ;
80
80
import org .hyperledger .besu .ethereum .mainnet .ProtocolSchedule ;
81
81
import org .hyperledger .besu .ethereum .mainnet .ProtocolSpec ;
82
82
import org .hyperledger .besu .ethereum .p2p .config .NetworkingConfiguration ;
@@ -604,6 +604,12 @@ public BesuController build() {
604
604
final int maxMessageSize = ethereumWireProtocolConfiguration .getMaxMessageSize ();
605
605
final Supplier <ProtocolSpec > currentProtocolSpecSupplier =
606
606
() -> protocolSchedule .getByBlockHeader (blockchain .getChainHeadHeader ());
607
+ final ForkIdManager forkIdManager =
608
+ new ForkIdManager (
609
+ blockchain ,
610
+ genesisConfigOptions .getForkBlockNumbers (),
611
+ genesisConfigOptions .getForkBlockTimestamps (),
612
+ ethereumWireProtocolConfiguration .isLegacyEth64ForkIdEnabled ());
607
613
final EthPeers ethPeers =
608
614
new EthPeers (
609
615
getSupportedProtocol (),
@@ -615,7 +621,9 @@ public BesuController build() {
615
621
nodeKey .getPublicKey ().getEncodedBytes (),
616
622
maxPeers ,
617
623
maxRemotelyInitiatedPeers ,
618
- randomPeerPriority );
624
+ randomPeerPriority ,
625
+ syncConfig .getSyncMode (),
626
+ forkIdManager );
619
627
620
628
final EthMessages ethMessages = new EthMessages ();
621
629
final EthMessages snapMessages = new EthMessages ();
@@ -681,13 +689,14 @@ public BesuController build() {
681
689
ethMessages ,
682
690
scheduler ,
683
691
peerValidators ,
684
- Optional .empty ());
692
+ Optional .empty (),
693
+ forkIdManager );
685
694
686
695
final PivotBlockSelector pivotBlockSelector =
687
696
createPivotSelector (
688
697
protocolSchedule , protocolContext , ethContext , syncState , metricsSystem , blockchain );
689
698
690
- final Synchronizer synchronizer =
699
+ final DefaultSynchronizer synchronizer =
691
700
createSynchronizer (
692
701
protocolSchedule ,
693
702
worldStateStorageCoordinator ,
@@ -697,6 +706,16 @@ public BesuController build() {
697
706
ethProtocolManager ,
698
707
pivotBlockSelector );
699
708
709
+ ethPeers .setTrailingPeerRequirementsSupplier (synchronizer ::calculateTrailingPeerRequirements );
710
+
711
+ if (SyncMode .isSnapSync (syncConfig .getSyncMode ())
712
+ || SyncMode .isCheckpointSync (syncConfig .getSyncMode ())) {
713
+ synchronizer .subscribeInSync ((b ) -> ethPeers .snapServerPeersNeeded (!b ));
714
+ ethPeers .snapServerPeersNeeded (true );
715
+ } else {
716
+ ethPeers .snapServerPeersNeeded (false );
717
+ }
718
+
700
719
protocolContext .setSynchronizer (Optional .of (synchronizer ));
701
720
702
721
final Optional <SnapProtocolManager > maybeSnapProtocolManager =
@@ -809,7 +828,7 @@ private TrieLogPruner createTrieLogPruner(
809
828
* @param pivotBlockSelector the pivot block selector
810
829
* @return the synchronizer
811
830
*/
812
- protected Synchronizer createSynchronizer (
831
+ protected DefaultSynchronizer createSynchronizer (
813
832
final ProtocolSchedule protocolSchedule ,
814
833
final WorldStateStorageCoordinator worldStateStorageCoordinator ,
815
834
final ProtocolContext protocolContext ,
@@ -1000,6 +1019,7 @@ protected String getSupportedProtocol() {
1000
1019
* @param scheduler the scheduler
1001
1020
* @param peerValidators the peer validators
1002
1021
* @param mergePeerFilter the merge peer filter
1022
+ * @param forkIdManager the fork id manager
1003
1023
* @return the eth protocol manager
1004
1024
*/
1005
1025
protected EthProtocolManager createEthProtocolManager (
@@ -1012,7 +1032,8 @@ protected EthProtocolManager createEthProtocolManager(
1012
1032
final EthMessages ethMessages ,
1013
1033
final EthScheduler scheduler ,
1014
1034
final List <PeerValidator > peerValidators ,
1015
- final Optional <MergePeerFilter > mergePeerFilter ) {
1035
+ final Optional <MergePeerFilter > mergePeerFilter ,
1036
+ final ForkIdManager forkIdManager ) {
1016
1037
return new EthProtocolManager (
1017
1038
protocolContext .getBlockchain (),
1018
1039
networkId ,
@@ -1026,8 +1047,7 @@ protected EthProtocolManager createEthProtocolManager(
1026
1047
mergePeerFilter ,
1027
1048
synchronizerConfiguration ,
1028
1049
scheduler ,
1029
- genesisConfigOptions .getForkBlockNumbers (),
1030
- genesisConfigOptions .getForkBlockTimestamps ());
1050
+ forkIdManager );
1031
1051
}
1032
1052
1033
1053
/**
0 commit comments