Update RitualStatus names to match Coordinator contract.

pull/3345/head
derekpierre 2023-11-14 17:16:54 -05:00 committed by Derek Pierre
parent 1cd6a09e25
commit d6a1e3f01f
9 changed files with 50 additions and 42 deletions

View File

@ -392,7 +392,7 @@ class Operator(BaseActor):
status = self.coordinator_agent.get_ritual_status(ritual_id=ritual_id)
# validate the status
if status != CoordinatorAgent.Ritual.Status.AWAITING_TRANSCRIPTS:
if status != CoordinatorAgent.Ritual.Status.DKG_AWAITING_TRANSCRIPTS:
self.log.debug(
f"ritual #{ritual_id} is not waiting for transcripts; status={status}; skipping execution"
)
@ -466,7 +466,7 @@ class Operator(BaseActor):
# Get the ritual and check the status from the blockchain
# TODO potentially optimize local cache of ritual participants (#3052)
status = self.coordinator_agent.get_ritual_status(ritual_id=ritual_id)
if status != CoordinatorAgent.Ritual.Status.AWAITING_AGGREGATIONS:
if status != CoordinatorAgent.Ritual.Status.DKG_AWAITING_AGGREGATIONS:
self.log.debug(
f"ritual #{ritual_id} is not waiting for aggregations; status={status}; skipping execution"
)

View File

@ -659,11 +659,12 @@ class CoordinatorAgent(EthereumContractAgent):
@dataclass
class Status:
NON_INITIATED = 0
AWAITING_TRANSCRIPTS = 1
AWAITING_AGGREGATIONS = 2
TIMEOUT = 3
INVALID = 4
FINALIZED = 5
DKG_AWAITING_TRANSCRIPTS = 1
DKG_AWAITING_AGGREGATIONS = 2
DKG_TIMEOUT = 3
DKG_INVALID = 4
ACTIVE = 5
EXPIRED = 6
@dataclass
class Participant:
@ -930,7 +931,7 @@ class CoordinatorAgent(EthereumContractAgent):
return result
def get_ritual_public_key(self, ritual_id: int) -> DkgPublicKey:
if self.get_ritual_status(ritual_id=ritual_id) != self.Ritual.Status.FINALIZED:
if self.get_ritual_status(ritual_id=ritual_id) != self.Ritual.Status.ACTIVE:
# TODO should we raise here instead?
return None

View File

@ -243,7 +243,7 @@ def nucypher_dkg(
continue
ritual_status = coordinator_agent.get_ritual_status(initiated_ritual)
if ritual_status == coordinator_agent.Ritual.Status.FINALIZED:
if ritual_status == coordinator_agent.Ritual.Status.ACTIVE:
# success
emitter.echo(
f"DKG Ritual #{initiated_ritual} completed after {(maya.now() - start_time).seconds}s",
@ -252,8 +252,8 @@ def nucypher_dkg(
completed_rituals[initiated_ritual] = ritual_status
elif (
# failure
ritual_status == coordinator_agent.Ritual.Status.TIMEOUT
or ritual_status == coordinator_agent.Ritual.Status.INVALID
ritual_status == coordinator_agent.Ritual.Status.DKG_TIMEOUT
or ritual_status == coordinator_agent.Ritual.Status.DKG_INVALID
):
emitter.error(
f"Ritual #{initiated_ritual} failed with status '{ritual_status}'"
@ -272,7 +272,7 @@ def nucypher_dkg(
# sort by ritual id, print results, stop script
for r_id in sorted(completed_rituals.keys()):
ritual_status = completed_rituals[r_id]
if ritual_status == coordinator_agent.Ritual.Status.FINALIZED:
if ritual_status == coordinator_agent.Ritual.Status.ACTIVE:
message = f"✓ Ritual #{r_id} successfully created"
color = "green"
else:

View File

@ -147,7 +147,10 @@ def test_ursula_ritualist(
# check that the ritual was created on-chain
assert coordinator_agent.number_of_rituals() == RITUAL_ID + 1
assert coordinator_agent.get_ritual_status(RITUAL_ID) == coordinator_agent.Ritual.Status.AWAITING_TRANSCRIPTS
assert (
coordinator_agent.get_ritual_status(RITUAL_ID)
== coordinator_agent.Ritual.Status.DKG_AWAITING_TRANSCRIPTS
)
# time travel has a side effect of mining a block so that the scanner will definitively
# pick up ritual event
@ -171,7 +174,10 @@ def test_ursula_ritualist(
def block_until_dkg_finalized(_):
"""simulates the passage of time and the execution of the event scanner"""
print("==================== BLOCKING UNTIL DKG FINALIZED ====================")
while coordinator_agent.get_ritual_status(RITUAL_ID) != coordinator_agent.Ritual.Status.FINALIZED:
while (
coordinator_agent.get_ritual_status(RITUAL_ID)
!= coordinator_agent.Ritual.Status.ACTIVE
):
for ursula in cohort:
# this is a testing hack to make the event scanner work,
# normally it's called by the reactor clock in a loop
@ -186,7 +192,7 @@ def test_ursula_ritualist(
"""Checks the finality of the DKG"""
print("==================== CHECKING DKG FINALITY ====================")
status = coordinator_agent.get_ritual_status(RITUAL_ID)
assert status == coordinator_agent.Ritual.Status.FINALIZED
assert status == coordinator_agent.Ritual.Status.ACTIVE
for ursula in cohort:
assert ursula.dkg_storage.get_transcript(RITUAL_ID) is not None

View File

@ -104,7 +104,7 @@ def test_initiate_ritual(
assert (
agent.get_ritual_status(ritual_id=ritual_id)
== agent.Ritual.Status.AWAITING_TRANSCRIPTS
== agent.Ritual.Status.DKG_AWAITING_TRANSCRIPTS
)
ritual_dkg_key = agent.get_ritual_public_key(ritual_id=ritual_id)
@ -133,7 +133,7 @@ def test_post_transcript(agent, transcripts, transacting_powers):
assert (
agent.get_ritual_status(ritual_id=ritual_id)
== agent.Ritual.Status.AWAITING_AGGREGATIONS
== agent.Ritual.Status.DKG_AWAITING_AGGREGATIONS
)
ritual_dkg_key = agent.get_ritual_public_key(ritual_id=ritual_id)
@ -177,7 +177,7 @@ def test_post_aggregation(
ritual = agent.get_ritual(ritual_id)
assert ritual.participant_public_keys == participant_public_keys
assert agent.get_ritual_status(ritual_id=ritual_id) == agent.Ritual.Status.FINALIZED
assert agent.get_ritual_status(ritual_id=ritual_id) == agent.Ritual.Status.ACTIVE
ritual_dkg_key = agent.get_ritual_public_key(ritual_id=ritual_id)
assert bytes(ritual_dkg_key) == bytes(dkg_public_key)

View File

@ -165,7 +165,7 @@ def test_ursula_ritualist(
# verify that the ritual is in the correct state
assert (
mock_coordinator_agent.get_ritual_status(ritual_id=ritual_id)
== mock_coordinator_agent.Ritual.Status.AWAITING_TRANSCRIPTS
== mock_coordinator_agent.Ritual.Status.DKG_AWAITING_TRANSCRIPTS
)
ritual = mock_coordinator_agent.get_ritual(ritual_id)
@ -183,7 +183,7 @@ def test_ursula_ritualist(
print("==================== CHECKING DKG FINALITY ====================")
status = mock_coordinator_agent.get_ritual_status(ritual_id)
assert status == mock_coordinator_agent.Ritual.Status.FINALIZED
assert status == mock_coordinator_agent.Ritual.Status.ACTIVE
for ursula in cohort:
assert ursula.dkg_storage.get_transcript(ritual_id) is not None

View File

@ -125,7 +125,7 @@ class MockCoordinatorAgent(MockContractAgent):
participant.transcript = bytes(transcript)
ritual.total_transcripts += 1
if ritual.total_transcripts == ritual.dkg_size:
ritual.status = self.RitualStatus.AWAITING_AGGREGATIONS
ritual.status = self.RitualStatus.DKG_AWAITING_AGGREGATIONS
self.emit_event(
signal=self.Events.START_AGGREGATION_ROUND,
ritual_id=ritual_id,
@ -231,15 +231,18 @@ class MockCoordinatorAgent(MockContractAgent):
if timestamp == 0:
return self.RitualStatus.NON_INITIATED
elif ritual.total_aggregations == ritual.dkg_size:
return self.RitualStatus.FINALIZED
if time.time() <= ritual.end_timestamp:
return self.RitualStatus.ACTIVE
else:
return self.RitualStatus.EXPIRED
elif ritual.aggregation_mismatch:
return self.RitualStatus.INVALID
return self.RitualStatus.DKG_INVALID
elif timestamp > deadline:
return self.RitualStatus.TIMEOUT
return self.RitualStatus.DKG_TIMEOUT
elif ritual.total_transcripts < ritual.dkg_size:
return self.RitualStatus.AWAITING_TRANSCRIPTS
return self.RitualStatus.DKG_AWAITING_TRANSCRIPTS
elif ritual.total_aggregations < ritual.dkg_size:
return self.RitualStatus.AWAITING_AGGREGATIONS
return self.RitualStatus.DKG_AWAITING_AGGREGATIONS
else:
raise RuntimeError(f"Ritual {ritual_id} is in an unknown state") # :-(
@ -253,7 +256,7 @@ class MockCoordinatorAgent(MockContractAgent):
)
def get_ritual_public_key(self, ritual_id: int) -> DkgPublicKey:
if self.get_ritual_status(ritual_id=ritual_id) != self.RitualStatus.FINALIZED:
if self.get_ritual_status(ritual_id=ritual_id) != self.RitualStatus.ACTIVE:
# TODO should we raise here instead?
return None

View File

@ -73,7 +73,7 @@ def test_mock_coordinator_round_1(
ritual = coordinator.rituals[0]
assert (
coordinator.get_ritual_status(0)
== MockCoordinatorAgent.RitualStatus.AWAITING_TRANSCRIPTS
== MockCoordinatorAgent.RitualStatus.DKG_AWAITING_TRANSCRIPTS
)
for p in ritual.participants:
@ -110,7 +110,7 @@ def test_mock_coordinator_round_2(
ritual = coordinator.rituals[0]
assert (
coordinator.get_ritual_status(0)
== MockCoordinatorAgent.RitualStatus.AWAITING_AGGREGATIONS
== MockCoordinatorAgent.RitualStatus.DKG_AWAITING_AGGREGATIONS
)
for p in ritual.participants:
@ -140,6 +140,4 @@ def test_mock_coordinator_round_2(
assert p.decryption_request_static_key == bytes(participant_public_keys[index])
assert len(coordinator.EVENTS) == 2 # no additional event emitted here?
assert (
coordinator.get_ritual_status(0) == MockCoordinatorAgent.RitualStatus.FINALIZED
)
assert coordinator.get_ritual_status(0) == MockCoordinatorAgent.RitualStatus.ACTIVE

View File

@ -111,10 +111,10 @@ def test_perform_round_1(
# ensure no operation performed for non-application-state
non_application_states = [
CoordinatorAgent.Ritual.Status.NON_INITIATED,
CoordinatorAgent.Ritual.Status.AWAITING_AGGREGATIONS,
CoordinatorAgent.Ritual.Status.FINALIZED,
CoordinatorAgent.Ritual.Status.TIMEOUT,
CoordinatorAgent.Ritual.Status.INVALID,
CoordinatorAgent.Ritual.Status.DKG_AWAITING_AGGREGATIONS,
CoordinatorAgent.Ritual.Status.ACTIVE,
CoordinatorAgent.Ritual.Status.DKG_TIMEOUT,
CoordinatorAgent.Ritual.Status.DKG_INVALID,
]
for state in non_application_states:
agent.get_ritual_status = lambda *args, **kwargs: state
@ -125,7 +125,7 @@ def test_perform_round_1(
# set correct state
agent.get_ritual_status = (
lambda *args, **kwargs: CoordinatorAgent.Ritual.Status.AWAITING_TRANSCRIPTS
lambda *args, **kwargs: CoordinatorAgent.Ritual.Status.DKG_AWAITING_TRANSCRIPTS
)
tx_hash = ursula.perform_round_1(
@ -209,10 +209,10 @@ def test_perform_round_2(
# ensure no operation performed for non-application-state
non_application_states = [
CoordinatorAgent.Ritual.Status.NON_INITIATED,
CoordinatorAgent.Ritual.Status.AWAITING_TRANSCRIPTS,
CoordinatorAgent.Ritual.Status.FINALIZED,
CoordinatorAgent.Ritual.Status.TIMEOUT,
CoordinatorAgent.Ritual.Status.INVALID,
CoordinatorAgent.Ritual.Status.DKG_AWAITING_TRANSCRIPTS,
CoordinatorAgent.Ritual.Status.ACTIVE,
CoordinatorAgent.Ritual.Status.DKG_TIMEOUT,
CoordinatorAgent.Ritual.Status.DKG_INVALID,
]
for state in non_application_states:
agent.get_ritual_status = lambda *args, **kwargs: state
@ -221,7 +221,7 @@ def test_perform_round_2(
# set correct state
agent.get_ritual_status = (
lambda *args, **kwargs: CoordinatorAgent.Ritual.Status.AWAITING_AGGREGATIONS
lambda *args, **kwargs: CoordinatorAgent.Ritual.Status.DKG_AWAITING_AGGREGATIONS
)
mocker.patch("nucypher.crypto.ferveo.dkg.verify_aggregate")