mirror of https://github.com/nucypher/nucypher.git
Update RitualStatus names to match Coordinator contract.
parent
1cd6a09e25
commit
d6a1e3f01f
|
@ -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"
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue