Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 24 additions & 22 deletions tests/feature_activation/test_mining_simulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ def test_signal_bits_in_mining(self) -> None:

manager = self.simulator.create_peer(builder)
manager.allow_mining_without_peers()
miner = self.simulator.create_miner(manager, hashpower=1e6)
miner = self.simulator.create_miner(manager, hashpower=1e12)
miner.start()

# There are 3 resources available for miners, and all of them should contain the correct signal_bits
Expand All @@ -86,60 +86,60 @@ def test_signal_bits_in_mining(self) -> None:

# At the beginning, all features are outside their signaling period, so none are signaled.
expected_signal_bits = 0b0000
assert self._get_ws_signal_bits(ws_transport) == [expected_signal_bits]
assert self._get_last_ws_signal_bits(ws_transport) == expected_signal_bits
miner.pause_after_exactly(n_blocks=1)
self.simulator.run(3600)
self.simulator.run(60)
assert self._get_signal_bits_from_get_block_template(get_block_template_client) == expected_signal_bits
assert self._get_signal_bits_from_mining(mining_client) == expected_signal_bits
assert self._get_ws_signal_bits(ws_transport) == [expected_signal_bits]
assert self._get_last_ws_signal_bits(ws_transport) == expected_signal_bits

miner.pause_after_exactly(n_blocks=6)
self.simulator.run(3600)
assert self._get_ws_signal_bits(ws_transport) == [expected_signal_bits] * 6
self.simulator.run(360)
assert self._get_last_ws_signal_bits(ws_transport) == expected_signal_bits

# At height=8, NOP_FEATURE_1 is signaling, so it's enabled by the default support.
expected_signal_bits = 0b0001
miner.pause_after_exactly(n_blocks=1)
self.simulator.run(3600)
self.simulator.run(60)
assert self._get_signal_bits_from_get_block_template(get_block_template_client) == expected_signal_bits
assert self._get_signal_bits_from_mining(mining_client) == expected_signal_bits
assert self._get_ws_signal_bits(ws_transport) == [expected_signal_bits]
assert self._get_last_ws_signal_bits(ws_transport) == expected_signal_bits

miner.pause_after_exactly(n_blocks=3)
self.simulator.run(3600)
assert self._get_ws_signal_bits(ws_transport) == [expected_signal_bits] * 3
self.simulator.run(180)
assert self._get_last_ws_signal_bits(ws_transport) == expected_signal_bits

# At height=12, NOP_FEATURE_2 is signaling, enabled by the user. NOP_FEATURE_1 also continues signaling.
expected_signal_bits = 0b0101
miner.pause_after_exactly(n_blocks=1)
self.simulator.run(3600)
self.simulator.run(60)
assert self._get_signal_bits_from_get_block_template(get_block_template_client) == expected_signal_bits
assert self._get_signal_bits_from_mining(mining_client) == expected_signal_bits
assert self._get_ws_signal_bits(ws_transport) == [expected_signal_bits]
assert self._get_last_ws_signal_bits(ws_transport) == expected_signal_bits

miner.pause_after_exactly(n_blocks=7)
self.simulator.run(3600)
assert self._get_ws_signal_bits(ws_transport) == [expected_signal_bits] * 7
self.simulator.run(360)
assert self._get_last_ws_signal_bits(ws_transport) == expected_signal_bits

# At height=20, NOP_FEATURE_1 stops signaling, and NOP_FEATURE_2 continues.
expected_signal_bits = 0b0100
miner.pause_after_exactly(n_blocks=1)
self.simulator.run(3600)
self.simulator.run(60)
assert self._get_signal_bits_from_get_block_template(get_block_template_client) == expected_signal_bits
assert self._get_signal_bits_from_mining(mining_client) == expected_signal_bits
assert self._get_ws_signal_bits(ws_transport) == [expected_signal_bits]
assert self._get_last_ws_signal_bits(ws_transport) == expected_signal_bits

miner.pause_after_exactly(n_blocks=3)
self.simulator.run(3600)
assert self._get_ws_signal_bits(ws_transport) == [expected_signal_bits] * 3
self.simulator.run(180)
assert self._get_last_ws_signal_bits(ws_transport) == expected_signal_bits

# At height=24, all features have left their signaling period and therefore none are signaled.
expected_signal_bits = 0b0000
miner.pause_after_exactly(n_blocks=1)
self.simulator.run(3600)
self.simulator.run(60)
assert self._get_signal_bits_from_get_block_template(get_block_template_client) == expected_signal_bits
assert self._get_signal_bits_from_mining(mining_client) == expected_signal_bits
assert self._get_ws_signal_bits(ws_transport) == [expected_signal_bits]
assert self._get_last_ws_signal_bits(ws_transport) == expected_signal_bits

def _get_signal_bits_from_get_block_template(self, web_client: StubSite) -> int:
result = self._get_result(web_client)
Expand All @@ -155,9 +155,11 @@ def _get_result(web_client: StubSite) -> dict[str, Any]:
response = web_client.get('')
return response.result.json_value()

def _get_ws_signal_bits(self, transport: StringTransport) -> list[int]:
def _get_last_ws_signal_bits(self, transport: StringTransport) -> int:
messages = self._get_transport_messages(transport)
signal_bits = [message['params'][0]['signal_bits'] for message in messages]
assert len(messages) > 0
last_message = messages[-1]
signal_bits = last_message['params'][0]['signal_bits']

return signal_bits

Expand Down