def METHOD_NAME(
    self,
    ritual_id: int,
    aggregated_transcript: AggregatedTranscript,
    public_key: DkgPublicKey,
    participant_public_key: SessionStaticKey,
    transacting_power: TransactingPower,
    fire_and_forget: bool = False,
) -> TxReceipt:
    ritual = self.rituals[ritual_id]
    operator_address = transacting_power.account
    # either mapping is populated or just assume provider same as operator for testing
    provider = (
        self._get_staking_provider_from_operator(operator=operator_address)
        or transacting_power.account
    )
    participant = self.get_participant_from_provider(ritual_id, provider)
    participant.aggregated = True
    participant.decryption_request_static_key = bytes(participant_public_key)
    g1_point = self.Ritual.G1Point.from_dkg_public_key(public_key)
    if len(ritual.aggregated_transcript) == 0:
        ritual.aggregated_transcript = bytes(aggregated_transcript)
        ritual.public_key = g1_point
    elif bytes(ritual.public_key) != bytes(g1_point) or keccak(
        ritual.aggregated_transcript
    ) != keccak(bytes(aggregated_transcript)):
        ritual.aggregation_mismatch = True
        # don't increment aggregations
        # TODO Emit EndRitual here?
        return self.blockchain.FAKE_RECEIPT
    ritual.total_aggregations += 1
    return self.blockchain.FAKE_RECEIPT