Skip to content

Commit a12297b

Browse files
committed
refactor(verification): move feature activation dependency
1 parent e889e7a commit a12297b

22 files changed

+114
-154
lines changed

hathor/builder/builder.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class BuildArtifacts(NamedTuple):
7979

8080

8181
_VertexVerifiersBuilder: TypeAlias = Callable[
82-
[HathorSettingsType, DifficultyAdjustmentAlgorithm, FeatureService],
82+
[HathorSettingsType, DifficultyAdjustmentAlgorithm],
8383
VertexVerifiers
8484
]
8585

@@ -493,7 +493,8 @@ def _get_or_create_bit_signaling_service(self) -> BitSignalingService:
493493
def _get_or_create_verification_service(self) -> VerificationService:
494494
if self._verification_service is None:
495495
verifiers = self._get_or_create_vertex_verifiers()
496-
self._verification_service = VerificationService(verifiers=verifiers)
496+
feature_service = self._get_or_create_feature_service()
497+
self._verification_service = VerificationService(verifiers=verifiers, feature_service=feature_service)
497498

498499
return self._verification_service
499500

@@ -509,17 +510,12 @@ def _get_or_create_feature_storage(self) -> FeatureActivationStorage | None:
509510
def _get_or_create_vertex_verifiers(self) -> VertexVerifiers:
510511
if self._vertex_verifiers is None:
511512
settings = self._get_or_create_settings()
512-
feature_service = self._get_or_create_feature_service()
513513
daa = self._get_or_create_daa()
514514

515515
if self._vertex_verifiers_builder:
516-
self._vertex_verifiers = self._vertex_verifiers_builder(settings, daa, feature_service)
516+
self._vertex_verifiers = self._vertex_verifiers_builder(settings, daa)
517517
else:
518-
self._vertex_verifiers = VertexVerifiers.create_defaults(
519-
settings=settings,
520-
daa=daa,
521-
feature_service=feature_service,
522-
)
518+
self._vertex_verifiers = VertexVerifiers.create_defaults(settings=settings, daa=daa)
523519

524520
return self._vertex_verifiers
525521

hathor/builder/cli_builder.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -275,12 +275,8 @@ def create_manager(self, reactor: Reactor) -> HathorManager:
275275

276276
daa = DifficultyAdjustmentAlgorithm(settings=settings, test_mode=test_mode)
277277

278-
vertex_verifiers = VertexVerifiers.create_defaults(
279-
settings=settings,
280-
daa=daa,
281-
feature_service=self.feature_service
282-
)
283-
verification_service = VerificationService(verifiers=vertex_verifiers)
278+
vertex_verifiers = VertexVerifiers.create_defaults(settings=settings, daa=daa)
279+
verification_service = VerificationService(verifiers=vertex_verifiers, feature_service=self.feature_service)
284280

285281
cpu_mining_service = CpuMiningService()
286282

hathor/cli/mining.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,15 +135,13 @@ def execute(args: Namespace) -> None:
135135
block.nonce, block.weight))
136136

137137
try:
138-
from unittest.mock import Mock
139-
140138
from hathor.conf.get_settings import get_global_settings
141139
from hathor.daa import DifficultyAdjustmentAlgorithm
142140
from hathor.verification.verification_service import VerificationService
143141
from hathor.verification.vertex_verifiers import VertexVerifiers
144142
settings = get_global_settings()
145143
daa = DifficultyAdjustmentAlgorithm(settings=settings)
146-
verifiers = VertexVerifiers.create_defaults(settings=settings, daa=daa, feature_service=Mock())
144+
verifiers = VertexVerifiers.create_defaults(settings=settings, daa=daa)
147145
verification_service = VerificationService(verifiers=verifiers)
148146
verification_service.verify_without_storage(block)
149147
except HathorError:

hathor/feature_activation/bit_signaling_service.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def _log_signal_bits(self, feature: Feature, enable_bit: bool, support: bool, no
163163

164164
def _get_signaling_features(self, block: Block) -> dict[Feature, Criteria]:
165165
"""Given a specific block, return all features that are in a signaling state for that block."""
166-
feature_descriptions = self._feature_service.get_bits_description(block=block)
166+
feature_descriptions = self._feature_service.get_feature_info(block=block)
167167
signaling_features = {
168168
feature: description.criteria
169169
for feature, description in feature_descriptions.items()

hathor/feature_activation/feature_service.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from typing import TYPE_CHECKING, Optional, TypeAlias
1717

1818
from hathor.feature_activation.feature import Feature
19-
from hathor.feature_activation.model.feature_description import FeatureDescription
19+
from hathor.feature_activation.model.feature_description import FeatureInfo
2020
from hathor.feature_activation.model.feature_state import FeatureState
2121
from hathor.feature_activation.settings import Settings as FeatureSettings
2222

@@ -64,7 +64,7 @@ def is_signaling_mandatory_features(self, block: 'Block') -> BlockSignalingState
6464
height = block.get_height()
6565
offset_to_boundary = height % self._feature_settings.evaluation_interval
6666
remaining_blocks = self._feature_settings.evaluation_interval - offset_to_boundary - 1
67-
descriptions = self.get_bits_description(block=block)
67+
descriptions = self.get_feature_info(block=block)
6868

6969
must_signal_features = (
7070
feature for feature, description in descriptions.items()
@@ -194,10 +194,10 @@ def _calculate_new_state(
194194

195195
raise ValueError(f'Unknown previous state: {previous_state}')
196196

197-
def get_bits_description(self, *, block: 'Block') -> dict[Feature, FeatureDescription]:
197+
def get_feature_info(self, *, block: 'Block') -> dict[Feature, FeatureInfo]:
198198
"""Returns the criteria definition and feature state for all features at a certain block."""
199199
return {
200-
feature: FeatureDescription(
200+
feature: FeatureInfo(
201201
criteria=criteria,
202202
state=self.get_state(block=block, feature=feature)
203203
)

hathor/feature_activation/model/feature_description.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from hathor.feature_activation.model.feature_state import FeatureState
1919

2020

21-
class FeatureDescription(NamedTuple):
21+
class FeatureInfo(NamedTuple):
2222
"""Represents all information related to one feature, that is, its criteria and state."""
2323
criteria: Criteria
2424
state: FeatureState

hathor/feature_activation/model/feature_state.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,7 @@ def get_signaling_states() -> set['FeatureState']:
4242
support it or not through bit signals is valid during those states.
4343
"""
4444
return {FeatureState.STARTED, FeatureState.MUST_SIGNAL, FeatureState.LOCKED_IN}
45+
46+
def is_active(self) -> bool:
47+
"""Return whether the state is active."""
48+
return self is FeatureState.ACTIVE

hathor/feature_activation/resources/feature.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def get_block_features(self, request: Request) -> bytes:
6868
return error.json_dumpb()
6969

7070
signal_bits = []
71-
feature_descriptions = self._feature_service.get_bits_description(block=block)
71+
feature_descriptions = self._feature_service.get_feature_info(block=block)
7272

7373
for feature, description in feature_descriptions.items():
7474
if description.state not in FeatureState.get_signaling_states():

hathor/manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1077,7 +1077,7 @@ def _log_feature_states(self, vertex: BaseTransaction) -> None:
10771077
if not isinstance(vertex, Block):
10781078
return
10791079

1080-
feature_descriptions = self._feature_service.get_bits_description(block=vertex)
1080+
feature_descriptions = self._feature_service.get_feature_info(block=vertex)
10811081
state_by_feature = {
10821082
feature.value: description.state.value
10831083
for feature, description in feature_descriptions.items()

hathor/simulator/simulator.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
from hathor.conf.get_settings import get_global_settings
2525
from hathor.conf.settings import HathorSettings
2626
from hathor.daa import DifficultyAdjustmentAlgorithm
27-
from hathor.feature_activation.feature_service import FeatureService
2827
from hathor.manager import HathorManager
2928
from hathor.p2p.peer_id import PeerId
3029
from hathor.simulator.clock import HeapClock, MemoryReactorHeapClock
@@ -243,17 +242,12 @@ def run(self,
243242
return True
244243

245244

246-
def _build_vertex_verifiers(
247-
settings: HathorSettings,
248-
daa: DifficultyAdjustmentAlgorithm,
249-
feature_service: FeatureService
250-
) -> VertexVerifiers:
245+
def _build_vertex_verifiers(settings: HathorSettings, daa: DifficultyAdjustmentAlgorithm) -> VertexVerifiers:
251246
"""
252247
A custom VertexVerifiers builder to be used by the simulator.
253248
"""
254249
return VertexVerifiers.create(
255250
settings=settings,
256251
vertex_verifier=SimulatorVertexVerifier(settings=settings, daa=daa),
257252
daa=daa,
258-
feature_service=feature_service,
259253
)

0 commit comments

Comments
 (0)