Пример #1
0
def handle_onchain_secretreveal(
        initiator_state: InitiatorTransferState,
        state_change: ContractReceiveSecretReveal,
        channel_state: NettingChannelState,
) -> TransitionResult:
    """ Validates and handles a ContractReceiveSecretReveal state change. """
    valid_secret = state_change.secrethash == initiator_state.transfer.lock.secrethash

    iteration = TransitionResult(initiator_state, list())
    if valid_secret:
        # Register LockedTransfer in secrethashes_to_onchain_unlockedlocks
        # without removing the LockedTransfer from secrethashes_to_lockedlocks
        channel.register_onchain_secret(
            channel_state=channel_state,
            secret=state_change.secret,
            secrethash=state_change.secrethash,
            delete_lock=False,
        )
        iteration.new_state = initiator_state

    return iteration