コード例 #1
0
def confirm_large_stake(value: NU = None, lock_periods: int = None) -> bool:
    """Interactively confirm a large stake and/or a long stake duration."""
    if value and (value > NU.from_tokens(150000)):
        click.confirm(CONFIRM_LARGE_STAKE_VALUE.format(value=value), abort=True)
    if lock_periods and (lock_periods > 365):
        click.confirm(CONFIRM_LARGE_STAKE_DURATION.format(lock_periods=lock_periods), abort=True)
    return True
コード例 #2
0
ファイル: confirm.py プロジェクト: chaoticx-org/nucypher
def confirm_large_and_or_long_stake(value: NU = None, lock_periods: int = None, economics: BaseEconomics = None) -> bool:
    """Interactively confirm a large stake and/or a long stake duration."""
    if economics and value and (value > (NU.from_nunits(economics.minimum_allowed_locked) * 10)):  # > 10x min stake
        click.confirm(CONFIRM_LARGE_STAKE_VALUE.format(value=value), abort=True)
    if economics and lock_periods and (lock_periods > economics.maximum_rewarded_periods):  # > 1 year
        lock_days = (lock_periods * economics.hours_per_period) // 24
        click.confirm(CONFIRM_LARGE_STAKE_DURATION.format(lock_periods=lock_periods, lock_days=lock_days),
                      abort=True)
    return True
コード例 #3
0
def test_confirm_large_stake_cli_action(test_emitter, mock_stdin, capsys,
                                        value, duration, must_confirm_value,
                                        must_confirm_duration):

    asked_about_value = lambda output: CONFIRM_LARGE_STAKE_VALUE.format(
        value=value) in output
    lock_days = (duration * STANDARD_ECONOMICS.hours_per_period) // 24
    asked_about_duration = lambda output: CONFIRM_LARGE_STAKE_DURATION.format(
        lock_periods=duration, lock_days=lock_days) in output

    # Positive Cases - either do not need to confirm anything, or say yes
    if must_confirm_value:
        mock_stdin.line(YES)
    if must_confirm_duration:
        mock_stdin.line(YES)
    result = confirm_large_and_or_long_stake(value=value,
                                             lock_periods=duration,
                                             economics=STANDARD_ECONOMICS)
    assert result
    captured = capsys.readouterr()
    assert must_confirm_value == asked_about_value(captured.out)
    assert must_confirm_duration == asked_about_duration(captured.out)
    assert mock_stdin.empty()

    if must_confirm_value or must_confirm_duration:
        # Negative cases - must confirm something and say no
        if must_confirm_value and must_confirm_duration:
            # yes to the former but not to the latter
            mock_stdin.line(YES)
            mock_stdin.line(NO)
        else:
            # no to whatever one we are asked about
            mock_stdin.line(NO)

        with pytest.raises(click.Abort):
            confirm_large_and_or_long_stake(value=value,
                                            lock_periods=duration,
                                            economics=STANDARD_ECONOMICS)
        captured = capsys.readouterr()
        assert must_confirm_value == asked_about_value(captured.out)
        assert must_confirm_duration == asked_about_duration(captured.out)
        assert mock_stdin.empty()