예제 #1
0
def test_PIP_MG_001(client_con_list_obj, reset_environment):
    """
    治理修改默认每个区块的最大Gas 投票失败
    :param client_con_list_obj:
    :param reset_environment:
    :return:
    """
    # # Change configuration parameters
    # genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
    # genesis.config.cbft.period = 50000
    # genesis.EconomicModel.Common.MaxEpochMinutes = 14
    # genesis.EconomicModel.Common.AdditionalCycleTime = 55
    # new_file = new_genesis_env.cfg.env_tmp + "/genesis.json"
    # genesis.to_file(new_file)
    # new_genesis_env.deploy_all(new_file)
    # client_con_list_obj[0].economic.env.deploy_all()

    # view Parameter value before treatment
    max_gas_limit1 = get_governable_parameter_value(client_con_list_obj[0], 'maxBlockGasLimit')
    # create Parametric proposal
    block = param_governance_verify_before_endblock(client_con_list_obj[0], 'block', 'maxBlockGasLimit', '4712389',
                                                    False)
    # view Parameter value after treatment
    max_gas_limit2 = get_governable_parameter_value(client_con_list_obj[0], 'maxBlockGasLimit')
    # wait block
    wait_block_number(client_con_list_obj[0].node, block)
    assert max_gas_limit2 == max_gas_limit1, "ErrMsg:Parameter value after treatment {}".format(max_gas_limit2)
예제 #2
0
def test_PIP_PVF_010(new_genesis_env, client_con_list_obj):
    """
    治理修改区块双签-证据有效期(超出有效期)
    :param new_genesis_env:
    :param client_con_list_obj:
    :return:
    """
    # Change configuration parameters
    adjust_initial_parameters(new_genesis_env)
    # view Parameter value before treatment
    slash_blocks1 = get_governable_parameter_value(client_con_list_obj[0], 'maxEvidenceAge')
    assert slash_blocks1 == '2', "ErrMsg:Parameter value before treatment {}".format(slash_blocks1)
    # create Parametric proposal
    param_governance_verify(client_con_list_obj[0], 'slashing', 'maxEvidenceAge', '1')
    # view Parameter value before treatment again
    slash_blocks2 = get_governable_parameter_value(client_con_list_obj[0], 'maxEvidenceAge')
    assert slash_blocks2 == '1', "ErrMsg:Parameter value after treatment {}".format(slash_blocks2)
    report_address, _ = client_con_list_obj[0].economic.account.generate_account(client_con_list_obj[0].node.web3,
                                                                                 client_con_list_obj[0].node.web3.toWei(
                                                                                     1000, 'ether'))
    # wait consensus block
    client_con_list_obj[0].economic.wait_consensus_blocknum(client_con_list_obj[0].node)
    # Verify changed parameters
    effective_block1 = client_con_list_obj[0].economic.get_front_settlement_switchpoint(client_con_list_obj[0].node,
                                                                                        int(slash_blocks1))
    log.info("Effective1 block height: {}".format(effective_block1))
    # Report1 prepareblock signature
    report_information = mock_duplicate_sign(1, client_con_list_obj[0].node.nodekey,
                                             client_con_list_obj[0].node.blsprikey,
                                             effective_block1)
    log.info("Report information: {}".format(report_information))
    result = client_con_list_obj[0].duplicatesign.reportDuplicateSign(1, report_information, report_address)
    assert_code(result, 303003)
def test_PIP_MG_003(client_consensus, reset_environment):
    """
    治理修改默认每个区块的最大Gas 处于已生效期
    :param client_consensus:
    :param reset_environment:
    :return:
    """
    first_client = client_consensus
    log.info("Current connection non-consensus first node:{}".format(
        first_client.node.node_mark))
    node = first_client.node
    change_parameter_value = '4712389'
    # view Parameter value before treatment
    first_max_gas_limit = get_governable_parameter_value(
        first_client, 'maxBlockGasLimit')
    # create Parametric proposal
    param_governance_verify(first_client, 'block', 'maxBlockGasLimit',
                            change_parameter_value)
    # view Parameter value after treatment
    second_max_gas_limit = get_governable_parameter_value(
        first_client, 'maxBlockGasLimit')
    assert second_max_gas_limit != first_max_gas_limit, "ErrMsg:Parameter value after treatment {}".format(
        second_max_gas_limit)
    assert second_max_gas_limit == change_parameter_value, "ErrMsg:Parameter value after treatment {}".format(
        second_max_gas_limit)
def test_PIP_MG_001_002(client_consensus, mark, reset_environment):
    """
    PIP_MG_001:治理修改默认每个区块的最大Gas 投票失败
    PIP_MG_002:治理修改默认每个区块的最大Gas 处于未生效期
    :param client_consensus:
    :param reset_environment:
    :return:
    """
    first_client = client_consensus
    log.info("Current connection non-consensus first node:{}".format(
        first_client.node.node_mark))
    node = first_client.node
    # view Parameter value before treatment
    first_max_gas_limit = get_governable_parameter_value(
        first_client, 'maxBlockGasLimit')
    # create Parametric proposal
    block = param_governance_verify_before_endblock(first_client, 'block',
                                                    'maxBlockGasLimit',
                                                    '4712389', mark)
    # view Parameter value after treatment
    second_max_gas_limit = get_governable_parameter_value(
        first_client, 'maxBlockGasLimit')
    # wait block
    wait_block_number(node, block)
    assert second_max_gas_limit == first_max_gas_limit, "ErrMsg:Parameter value after treatment {}".format(
        second_max_gas_limit)
def test_PIP_PVF_009(new_genesis_env):
    """
    治理修改区块双签-证据有效期(节点质押退回锁定周期-1)
    :param new_genesis_env:
    :return:
    """
    # Change configuration parameters
    genesis = from_dict(data_class=Genesis,
                        data=new_genesis_env.genesis_config)
    genesis.economicModel.staking.unStakeFreezeDuration = 3
    genesis.economicModel.slashing.maxEvidenceAge = 1
    new_file = new_genesis_env.cfg.env_tmp + "/genesis_0.13.0.json"
    genesis.to_file(new_file)
    new_genesis_env.deploy_all(new_file)

    first_client = get_client_consensus(new_genesis_env, staking_cfg)
    log.info("Current connection non-consensus node:{}".format(
        first_client.node.node_mark))
    economic = first_client.economic
    node = first_client.node
    change_parameter_value = '2'
    # view Parameter value before treatment
    first_slash_blocks = get_governable_parameter_value(
        first_client, 'maxEvidenceAge')
    # create Parametric proposal
    param_governance_verify(first_client, 'slashing', 'maxEvidenceAge',
                            change_parameter_value)
    # view Parameter value before treatment again
    second_slash_blocks = get_governable_parameter_value(
        first_client, 'maxEvidenceAge')
    assert second_slash_blocks != first_slash_blocks, "ErrMsg:Parameter value after treatment {}".format(
        second_slash_blocks)
    assert second_slash_blocks == change_parameter_value, "ErrMsg:Parameter value after treatment {}".format(
        second_slash_blocks)
    report_address, _ = economic.account.generate_account(
        node.web3, node.web3.toWei(1000, 'ether'))
    # wait consensus block
    economic.wait_consensus_blocknum(node)
    # Verify changed parameters
    first_effective_block = economic.get_front_settlement_switchpoint(
        node, int(first_slash_blocks))
    log.info("first effective block height: {}".format(first_effective_block))
    second_effective_block = economic.get_front_settlement_switchpoint(
        node, int(second_slash_blocks))
    log.info(
        "second effective block height: {}".format(second_effective_block))
    # first Report prepareblock signature
    report_information = mock_duplicate_sign(1, node.nodekey, node.blsprikey,
                                             first_effective_block)
    log.info("Report information: {}".format(report_information))
    result = first_client.duplicatesign.reportDuplicateSign(
        1, report_information, report_address)
    assert_code(result, 0)
    # second Report prepareblock signature
    report_information = mock_duplicate_sign(1, node.nodekey, node.blsprikey,
                                             second_effective_block)
    log.info("Report information: {}".format(report_information))
    result = first_client.duplicatesign.reportDuplicateSign(
        1, report_information, report_address)
    assert_code(result, 303000)
def test_PIP_PVF_008(new_genesis_env):
    """
    治理修改区块双签-证据有效期处于已生效期
    :param new_genesis_env:
    :return:
    """
    # Change configuration parameters
    adjust_initial_parameters(new_genesis_env)
    first_client = get_client_consensus(new_genesis_env, staking_cfg)
    log.info("Current connection non-consensus node:{}".format(
        first_client.node.node_mark))
    economic = first_client.economic
    node = first_client.node
    change_parameter_value = '1'
    # view Parameter value before treatment
    first_slash_blocks = get_governable_parameter_value(
        first_client, 'maxEvidenceAge')
    # create Parametric proposal
    param_governance_verify(first_client, 'slashing', 'maxEvidenceAge',
                            change_parameter_value)
    # view Parameter value before treatment again
    second_slash_blocks = get_governable_parameter_value(
        first_client, 'maxEvidenceAge')
    assert second_slash_blocks != first_slash_blocks, "ErrMsg:Parameter value after treatment {}".format(
        second_slash_blocks)
    assert second_slash_blocks == change_parameter_value, "ErrMsg:Parameter value after treatment {}".format(
        second_slash_blocks)
    report_address, _ = economic.account.generate_account(
        node.web3, node.web3.toWei(1000, 'ether'))
    # wait consensus block
    economic.wait_consensus_blocknum(node)
    # Verify changed parameters
    effective_block = economic.get_front_settlement_switchpoint(
        node, int(second_slash_blocks))
    log.info("effective_block block height: {}".format(effective_block))
    # wait consensus block
    economic.wait_consensus_blocknum(node)
    # first Report prepareblock signature
    report_information = mock_duplicate_sign(1, node.nodekey, node.blsprikey,
                                             economic.consensus_size + 1)
    log.info("Report information: {}".format(report_information))
    result = first_client.duplicatesign.reportDuplicateSign(
        1, report_information, report_address)
    assert_code(result, 303003)
    # second Report prepareblock signature
    report_information = mock_duplicate_sign(1, node.nodekey, node.blsprikey,
                                             effective_block)
    log.info("Report information: {}".format(report_information))
    result = first_client.duplicatesign.reportDuplicateSign(
        1, report_information, report_address)
    assert_code(result, 0)
예제 #7
0
def test_PIP_MG_003(client_con_list_obj, reset_environment):
    """
    治理修改默认每个区块的最大Gas 处于已生效期
    :param client_con_list_obj:
    :param reset_environment:
    :return:
    """
    # view Parameter value before treatment
    max_gas_limit1 = get_governable_parameter_value(client_con_list_obj[0], 'maxBlockGasLimit')
    # create Parametric proposal
    param_governance_verify(client_con_list_obj[0], 'block', 'maxBlockGasLimit', '4712389')
    # view Parameter value after treatment
    max_gas_limit2 = get_governable_parameter_value(client_con_list_obj[0], 'maxBlockGasLimit')
    assert max_gas_limit2 == '4712389', "ErrMsg:Parameter value after treatment {}".format(max_gas_limit2)
예제 #8
0
def information_before_report_reward(client_obj):
    # view Pledge amount
    candidate_info1 = client_obj.ppos.getCandidateInfo(client_obj.node.node_id)
    pledge_amount1 = candidate_info1['Ret']['Released']
    # view Parameter value before treatment
    report_reward1 = get_governable_parameter_value(client_obj, 'duplicateSignReportReward')
    return pledge_amount1, report_reward1
예제 #9
0
def test_PIP_PVF_015(client_con_list_obj, reset_environment):
    """
    治理修改区块双签-最高处罚比例为1‱
    :param client_con_list_obj:
    :param reset_environment:
    :return:
    """
    # view Pledge amount and Parameter value before treatment
    pledge_amount1, penalty_ratio1 = information_before_penalty_ratio(client_con_list_obj[0])
    # create Parametric proposal
    param_governance_verify(client_con_list_obj[0], 'slashing', 'slashFractionDuplicateSign', '1')
    # view Parameter value before treatment again
    penalty_ratio2 = get_governable_parameter_value(client_con_list_obj[0], 'slashFractionDuplicateSign')
    assert penalty_ratio2 == '1', "ErrMsg:Parameter value after treatment {}".format(penalty_ratio2)
    # create account
    report_address, _ = client_con_list_obj[0].economic.account.generate_account(client_con_list_obj[0].node.web3,
                                                                                 client_con_list_obj[0].node.web3.toWei(
                                                                                     1000, 'ether'))
    # Verify changed parameters
    current_block = client_con_list_obj[0].node.eth.blockNumber
    log.info("Current block height: {}".format(current_block))
    # Verify changed parameters report
    duplicate_sign(client_con_list_obj[0], report_address, current_block)
    # assret penalty amount
    assret_penalty_amount(client_con_list_obj, pledge_amount1, 1)
예제 #10
0
def information_before_penalty_ratio(client_obj):
    # view Pledge amount
    candidate_info1 = client_obj.ppos.getCandidateInfo(client_obj.node.node_id)
    pledge_amount1 = candidate_info1['Ret']['Released']
    # view Parameter value before treatment
    penalty_ratio1 = get_governable_parameter_value(client_obj, 'slashFractionDuplicateSign')
    return pledge_amount1, penalty_ratio1
예제 #11
0
def test_PIP_PVF_020(client_con_list_obj, reset_environment):
    """
    治理修改区块双签-举报奖励比例为1%
    :param client_con_list_obj:
    :param reset_environment:
    :return:
    """
    # get pledge_amount1 report_reward1
    pledge_amount1, report_reward1 = information_before_report_reward(client_con_list_obj[0])
    # create Parametric proposal
    param_governance_verify(client_con_list_obj[0], 'slashing', 'duplicateSignReportReward', '1')
    # view Parameter value after treatment
    report_reward2 = get_governable_parameter_value(client_con_list_obj[0], 'duplicateSignReportReward')
    assert report_reward2 == '1', "ErrMsg:Parameter value after treatment {}".format(report_reward2)
    # get account amount
    report_address, report_amount1, incentive_pool_account1 = get_account_amount(client_con_list_obj[0])
    # Verify changed parameters
    current_block = client_con_list_obj[0].node.eth.blockNumber
    log.info("Current block height: {}".format(current_block))
    # Verify changed parameters report
    duplicate_sign(client_con_list_obj[0], report_address, current_block)
    # view Pledge amount after punishment
    proportion_reward, incentive_pool_reward = client_con_list_obj[1].economic.get_report_reward(pledge_amount1, None,
                                                                                                 1)
    log.info("Whistleblower benefits:{} Incentive pool income:{}".format(proportion_reward, incentive_pool_reward))
    # asster account amount
    asster_income_account_amount(client_con_list_obj[1], report_amount1, incentive_pool_account1,
                                 report_address, proportion_reward, incentive_pool_reward)
def test_PIP_PVF_003(clients_consensus, reset_environment):
    """
    治理修改低0出块率扣除验证人自有质押金块数成功处于已生效期
    :param clients_consensus:
    :param reset_environment:
    :return:
    """
    first_index = 0
    first_client = clients_consensus[first_index]
    log.info("当前连接节点:{}".format(first_client.node.node_mark))
    node = first_client.node
    # get pledge amount1 and block reward
    first_pledge_amount, block_reward, first_slash_blocks = information_before_slash_blocks(
        first_client)
    # create Parametric proposal
    param_governance_verify(first_client, 'slashing', 'slashBlocksReward', '0')
    log.info("Current block height: {}".format(node.eth.blockNumber))
    # Get governable parameters again
    second_slash_blocks = get_governable_parameter_value(
        first_client, 'slashBlocksReward')
    assert second_slash_blocks == '0', "ErrMsg:Change parameters {}".format(
        second_slash_blocks)
    # Verify changed parameters
    verify_changed_parameters(clients_consensus, first_pledge_amount,
                              block_reward, second_slash_blocks)
예제 #13
0
def test_PIP_PVF_004(client_con_list_obj, client_new_node_obj_list, reset_environment):
    """
    治理修改低0出块率扣除验证人自有质押金块数成功扣除区块奖励块数60100-自由金额质押
    :param client_con_list_obj:
    :param reset_environment:
    :return:
    """
    # get pledge amount1 and block reward
    pledge_amount1, block_reward, slash_blocks1 = information_before_slash_blocks(client_con_list_obj[0])
    # create Parametric proposal
    param_governance_verify(client_con_list_obj[0], 'slashing', 'slashBlocksReward', '60100')
    log.info("Current block height: {}".format(client_con_list_obj[0].node.eth.blockNumber))
    # Get governable parameters again
    slash_blocks2 = get_governable_parameter_value(client_con_list_obj[0], 'slashBlocksReward')
    assert slash_blocks2 == '60100', "ErrMsg:Change parameters {}".format(slash_blocks2)
    # create account
    address, _ = client_con_list_obj[0].economic.account.generate_account(client_con_list_obj[0].node.web3,
                                                                          client_con_list_obj[
                                                                              0].economic.create_staking_limit * 2)
    # create staking
    result = client_new_node_obj_list[0].staking.create_staking(0, address, address)
    assert_code(result, 0)
    # wait settlement block
    client_new_node_obj_list[0].economic.wait_settlement_blocknum(client_new_node_obj_list[0].node)
    for i in range(4):
        result = check_node_in_list(client_con_list_obj[0].node.node_id, client_con_list_obj[0].ppos.getValidatorList)
        log.info("Current node in consensus list status:{}".format(result))
        if result:
            # Verify changed parameters
            Verify_changed_parameters(client_con_list_obj, pledge_amount1, block_reward, slash_blocks2)
            break
        else:
            # wait consensus block
            client_con_list_obj[0].economic.wait_consensus_blocknum(client_con_list_obj[0].node)
예제 #14
0
def test_PIP_PVF_009(new_genesis_env, client_con_list_obj):
    """
    治理修改区块双签-证据有效期(节点质押退回锁定周期-1)
    :param new_genesis_env:
    :param client_con_list_obj:
    :return:
    """
    # Change configuration parameters
    genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
    genesis.economicModel.staking.unStakeFreezeDuration = 3
    genesis.economicModel.slashing.maxEvidenceAge = 1
    new_file = new_genesis_env.cfg.env_tmp + "/genesis.json"
    genesis.to_file(new_file)
    new_genesis_env.deploy_all(new_file)
    # view Parameter value before treatment
    slash_blocks1 = get_governable_parameter_value(client_con_list_obj[0], 'maxEvidenceAge')
    # create Parametric proposal
    param_governance_verify(client_con_list_obj[0], 'slashing', 'maxEvidenceAge', '2')
    # view Parameter value before treatment again
    slash_blocks2 = get_governable_parameter_value(client_con_list_obj[0], 'maxEvidenceAge')
    assert slash_blocks2 == '2', "ErrMsg:Parameter value after treatment {}".format(slash_blocks2)
    report_address, _ = client_con_list_obj[0].economic.account.generate_account(client_con_list_obj[0].node.web3,
                                                                                 client_con_list_obj[0].node.web3.toWei(
                                                                                     1000, 'ether'))
    # wait consensus block
    client_con_list_obj[0].economic.wait_consensus_blocknum(client_con_list_obj[0].node)
    # Verify changed parameters
    effective_block1 = client_con_list_obj[0].economic.get_front_settlement_switchpoint(client_con_list_obj[0].node,
                                                                                        int(slash_blocks1))
    effective_block2 = client_con_list_obj[0].economic.get_front_settlement_switchpoint(client_con_list_obj[0].node,
                                                                                        int(slash_blocks2))
    log.info("Effective1 block height: {}".format(effective_block1))
    log.info("Effective2 block height: {}".format(effective_block2))
    # Report1 prepareblock signature
    report_information = mock_duplicate_sign(1, client_con_list_obj[0].node.nodekey,
                                             client_con_list_obj[0].node.blsprikey,
                                             effective_block1)
    log.info("Report information: {}".format(report_information))
    result = client_con_list_obj[0].duplicatesign.reportDuplicateSign(1, report_information, report_address)
    assert_code(result, 0)
    # Report2 prepareblock signature
    report_information = mock_duplicate_sign(1, client_con_list_obj[0].node.nodekey,
                                             client_con_list_obj[0].node.blsprikey,
                                             effective_block2)
    log.info("Report information: {}".format(report_information))
    result = client_con_list_obj[0].duplicatesign.reportDuplicateSign(1, report_information, report_address)
    assert_code(result, 303000)
def information_before_report_reward(client):
    # view Pledge amount
    first_candidate_info = client.ppos.getCandidateInfo(client.node.node_id)
    first_pledge_amount = first_candidate_info['Ret']['Released']
    # view Parameter value before treatment
    first_report_reward = get_governable_parameter_value(
        client, 'duplicateSignReportReward')
    return first_pledge_amount, first_report_reward
def information_before_penalty_ratio(client):
    # view Pledge amount
    first_candidate_info = client.ppos.getCandidateInfo(client.node.node_id)
    first_pledge_amount = first_candidate_info['Ret']['Released']
    # view Parameter value before treatment
    first_penalty_ratio = get_governable_parameter_value(
        client, 'slashFractionDuplicateSign')
    return first_pledge_amount, first_penalty_ratio
def test_PIP_PVF_004(client_consensus, clients_noconsensus, reset_environment):
    """
    治理修改低0出块率扣除验证人自有质押金块数成功扣除区块奖励块数49999-自由金额质押
    :param client_consensus:
    :param clients_noconsensus:
    :param reset_environment:
    :return:
    """
    consensus_client = client_consensus
    log.info("Current connection consensus node".format(
        consensus_client.node.node_mark))
    first_index = 0
    first_client = clients_noconsensus[first_index]
    log.info("Current connection non-consensus node:{}".format(
        first_client.node.node_mark))
    economic = consensus_client.economic
    node = consensus_client.node
    change_parameter_value = '49999'
    # get pledge amount1 and block reward
    consensus_pledge_amount, block_reward, first_slash_blocks = information_before_slash_blocks(
        consensus_client)
    # create Parametric proposal
    param_governance_verify(consensus_client, 'slashing', 'slashBlocksReward',
                            change_parameter_value)
    log.info("Current block height: {}".format(node.eth.blockNumber))
    # Get governable parameters again
    second_slash_blocks = get_governable_parameter_value(
        consensus_client, 'slashBlocksReward')
    assert second_slash_blocks == change_parameter_value, "ErrMsg:Change parameters {}".format(
        second_slash_blocks)
    # create account
    address, _ = economic.account.generate_account(
        node.web3, von_amount(economic.create_staking_limit, 2))
    # create staking
    result = first_client.staking.create_staking(0, address, address)
    assert_code(result, 0)
    # wait settlement block
    economic.wait_settlement_blocknum(node)
    candidate_info = consensus_client.ppos.getCandidateInfo(
        first_client.node.node_id)
    first_pledge_amount = candidate_info['Ret']['Released']
    log.info("Current pledge node amount:{}".format(first_pledge_amount))
    for i in range(4):
        result = check_node_in_list(node.node_id,
                                    consensus_client.ppos.getValidatorList)
        log.info("Current node in consensus list status:{}".format(result))
        if result:
            # Verify changed parameters
            verify_changed_parameters(clients_noconsensus, first_pledge_amount,
                                      block_reward, second_slash_blocks)
            break
        else:
            # wait consensus block
            economic.wait_consensus_blocknum(node)
예제 #18
0
def information_before_slash_blocks(client_obj):
    node = client_obj.node
    # view Consensus Amount of pledge
    candidate_info1 = client_obj.ppos.getCandidateInfo(node.node_id)
    pledge_amount1 = candidate_info1['Ret']['Released']
    # view block_reward
    log.info("block: {}".format(node.eth.blockNumber))
    block_reward, staking_reward = client_obj.economic.get_current_year_reward(node)
    log.info("block_reward: {} staking_reward: {}".format(block_reward, staking_reward))
    # Get governable parameters
    slash_blocks1 = get_governable_parameter_value(client_obj, 'slashBlocksReward')
    return pledge_amount1, block_reward, slash_blocks1
예제 #19
0
def test_UP_FV_009(clients_new_node):
    """
    锁仓账号申请质押,验证人违规被扣除节点自有质押金k
    :param clients_new_node:
    :return:
    """
    client1 = clients_new_node[0]
    client2 = clients_new_node[1]
    economic = client1.economic
    node = client1.node
    # create restricting plan and staking
    address1 = restricting_plan_validation_staking(client1, economic, node)
    # Waiting for the end of the settlement period
    economic.wait_settlement_blocknum(node)
    # Obtain block bonus and pledge bonus
    block_reward, staking_reward = client1.economic.get_current_year_reward(
        node)
    # Get penalty blocks
    slash_blocks = get_governable_parameter_value(client1, 'slashBlocksReward')
    # view restricting plan
    restricting_info = client1.ppos.getRestrictingInfo(address1)
    log.info("restricting plan informtion: {}".format(restricting_info))
    info = restricting_info['Ret']
    assert info[
        'debt'] == economic.create_staking_limit, 'ErrMsg: restricting debt amount {}'.format(
            info['debt'])
    log.info("Current block height: {}".format(client2.node.eth.blockNumber))
    # stop node
    client1.node.stop()
    # Waiting for a 3 consensus round
    client2.economic.wait_consensus_blocknum(client2.node, 3)
    log.info("Current block height: {}".format(client2.node.eth.blockNumber))
    # view verifier list
    verifier_list = client2.ppos.getVerifierList()
    log.info("verifier_list: {}".format(verifier_list))
    punishment_amonut = int(
        Decimal(str(block_reward)) * Decimal(str(slash_blocks)))
    log.info("punishment_amonut: {}".format(punishment_amonut))
    # view restricting plan again
    restricting_info = client2.ppos.getRestrictingInfo(address1)
    log.info("restricting plan informtion: {}".format(restricting_info))
    info = restricting_info['Ret']
    if punishment_amonut < economic.create_staking_limit:
        assert (info['balance']
                == economic.create_staking_limit - punishment_amonut) or (
                    info['balance']
                    == economic.create_staking_limit - punishment_amonut *
                    2), 'ErrMsg: restricting balance amount {}'.format(
                        info['balance'])
    else:
        assert_code(restricting_info, 304005)
def test_PIP_PVF_016_017(clients_consensus, mark, reset_environment):
    """
    PIP_PVF_016:治理修改区块双签-举报奖励比例投票失败
    PIP_PVF_017:治理修改区块双签-举报奖励比例处于未生效期
    :param clients_consensus:
    :param reset_environment:
    :return:
    """
    first_index = 0
    second_index = 1
    first_client = clients_consensus[first_index]
    log.info("Current connection non-consensus first node:{}".format(
        first_client.node.node_mark))
    second_client = clients_consensus[second_index]
    log.info("Current connection non-consensus second node:{}".format(
        second_client.node.node_mark))
    economic = first_client.economic
    node = first_client.node
    change_parameter_value = '60'
    first_pledge_amount, first_report_reward = information_before_report_reward(
        first_client)
    # create Parametric proposal
    param_governance_verify_before_endblock(first_client, 'slashing',
                                            'duplicateSignReportReward',
                                            change_parameter_value, mark)
    # view Parameter value after treatment
    second_report_reward = get_governable_parameter_value(
        first_client, 'duplicateSignReportReward')
    assert first_report_reward == second_report_reward, "ErrMsg:Parameter value after treatment {}".format(
        second_report_reward)
    # wait consensus block
    economic.wait_consensus_blocknum(node)
    # get account amount
    report_address, first_report_amount, first_incentive_pool_account = get_account_amount(
        first_client)
    # Verify changed parameters
    current_block = node.eth.blockNumber
    log.info("Current block height: {}".format(current_block))
    # Verify changed parameters report
    duplicate_sign(first_client, report_address, current_block)
    # view Pledge amount after punishment
    proportion_reward, incentive_pool_reward = economic.get_report_reward(
        first_pledge_amount)
    log.info("Whistleblower benefits:{} Incentive pool income:{}".format(
        proportion_reward, incentive_pool_reward))
    # asster account amount
    asster_income_account_amount(second_client, first_report_amount,
                                 first_incentive_pool_account, report_address,
                                 proportion_reward, incentive_pool_reward)
예제 #21
0
def test_PIP_PVF_002(client_con_list_obj, reset_environment):
    """
    理修改低0出块率扣除验证人自有质押金块数成功处于未生效期
    :param client_con_list_obj:
    :return:
    """
    # get pledge amount1 and block reward
    pledge_amount1, block_reward, slash_blocks1 = information_before_slash_blocks(client_con_list_obj[0])
    # create Parametric proposal
    param_governance_verify_before_endblock(client_con_list_obj[0], 'slashing', 'slashBlocksReward', '0')
    # Get governable parameters again
    slash_blocks2 = get_governable_parameter_value(client_con_list_obj[0], 'slashBlocksReward')
    assert slash_blocks1 == slash_blocks2, "ErrMsg:slash blocks {}".format(slash_blocks2)
    # Verify changed parameters
    Verify_changed_parameters(client_con_list_obj, pledge_amount1, block_reward, slash_blocks1)
예제 #22
0
def test_AL_BI_002(new_genesis_env, staking_cfg):
    """
    节点出块率为0被处罚,激励池金额增加
    :param new_genesis_env:
    :param staking_cfg:
    :return:
    """
    # Change configuration parameters
    genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
    genesis.economicModel.slashing.slashBlocksReward = 5
    new_file = new_genesis_env.cfg.env_tmp + "/genesis.json"
    genesis.to_file(new_file)
    new_genesis_env.deploy_all(new_file)
    client_noc_list_obj = get_client_noconsensus_list(new_genesis_env, staking_cfg)
    client1 = client_noc_list_obj[0]
    client2 = client_noc_list_obj[1]
    economic = client1.economic
    node = client1.node
    log.info("nodeid: {}".format(node.node_id))
    # create account
    address, _ = economic.account.generate_account(node.web3, von_amount(economic.create_staking_limit, 2))
    # create staking
    result = client1.staking.create_staking(0, address, address)
    assert_code(result, 0)
    # Waiting for a settlement round
    client2.economic.wait_settlement_blocknum(client2.node)
    # view incentive account
    incentive_pool_balance = node.eth.getBalance(EconomicConfig.INCENTIVEPOOL_ADDRESS)
    log.info("incentive_pool_balance: {}".format(incentive_pool_balance))
    # view block_reward
    block_reward, staking_reward = economic.get_current_year_reward(node)
    log.info("block_reward: {} staking_reward: {}".format(block_reward, staking_reward))
    # stop node
    node.stop()
    # Waiting for 2 consensus round
    client2.economic.wait_consensus_blocknum(client2.node, 2)
    # view verifier list
    verifier_list = client2.ppos.getVerifierList()
    log.info("verifier_list: {}".format(verifier_list))
    slash_blocks = get_governable_parameter_value(client2, 'slashBlocksReward')
    # Get the penalty amount
    penalty_amount = int(Decimal(str(block_reward)) * Decimal(str(slash_blocks)))
    log.info("penalty_amount: {}".format(penalty_amount))
    # view incentive account again
    incentive_pool_balance1 = client2.node.eth.getBalance(EconomicConfig.INCENTIVEPOOL_ADDRESS)
    log.info("incentive_pool_balance1: {}".format(incentive_pool_balance1))
    assert incentive_pool_balance1 == incentive_pool_balance + penalty_amount, "ErrMsg: incentive_pool_balance: {}".format(
        incentive_pool_balance1)
예제 #23
0
def test_PIP_PVF_003(client_con_list_obj, reset_environment):
    """
    治理修改低0出块率扣除验证人自有质押金块数成功处于已生效期
    :param client_con_list_obj:
    :param reset_environment:
    :return:
    """
    # get pledge amount1 and block reward
    pledge_amount1, block_reward, slash_blocks1 = information_before_slash_blocks(client_con_list_obj[0])
    # create Parametric proposal
    param_governance_verify(client_con_list_obj[0], 'slashing', 'slashBlocksReward', '0')
    log.info("Current block height: {}".format(client_con_list_obj[0].node.eth.blockNumber))
    # Get governable parameters again
    slash_blocks2 = get_governable_parameter_value(client_con_list_obj[0], 'slashBlocksReward')
    assert slash_blocks2 == '0', "ErrMsg:Change parameters {}".format(slash_blocks2)
    # Verify changed parameters
    Verify_changed_parameters(client_con_list_obj, pledge_amount1, block_reward, slash_blocks2)
예제 #24
0
def test_PIP_PVF_001(client_con_list_obj, reset_environment):
    """
    治理修改低0出块率扣除验证人自有质押金块数投票失败
    :param client_con_list_obj:
    :return:
    """
    # Initialize environment
    client_con_list_obj[0].economic.env.deploy_all()
    time.sleep(3)
    # get pledge amount1 and block reward
    pledge_amount1, block_reward, slash_blocks1 = information_before_slash_blocks(client_con_list_obj[0])
    # create Parametric proposal
    param_governance_verify_before_endblock(client_con_list_obj[0], 'slashing', 'slashBlocksReward', '0', False)
    # Get governable parameters again
    slash_blocks2 = get_governable_parameter_value(client_con_list_obj[0], 'slashBlocksReward')
    assert slash_blocks1 == slash_blocks2, "ErrMsg:slash blocks {}".format(slash_blocks2)
    # Verify changed parameters
    Verify_changed_parameters(client_con_list_obj, pledge_amount1, block_reward, slash_blocks1)
def test_PIP_PVF_011_012(clients_consensus, mark, reset_environment):
    """
    治理修改区块双签-最高处罚比例投票失败
    :param clients_consensus:
    :param mark:
    :param reset_environment:
    :return:
    """
    first_index = 0
    first_client = clients_consensus[first_index]
    log.info("Current connection non-consensus node:{}".format(
        first_client.node.node_mark))
    economic = first_client.economic
    node = first_client.node
    change_parameter_value = '1000'
    # view Pledge amount and Parameter value before treatment
    first_pledge_amount, first_penalty_ratio = information_before_penalty_ratio(
        first_client)
    # create Parametric proposal
    param_governance_verify_before_endblock(first_client, 'slashing',
                                            'slashFractionDuplicateSign',
                                            change_parameter_value, mark)
    # view Parameter value after treatment again
    second_penalty_ratio = get_governable_parameter_value(
        first_client, 'slashFractionDuplicateSign')
    assert second_penalty_ratio == first_penalty_ratio, "ErrMsg:Parameter value after treatment {}".format(
        second_penalty_ratio)
    # wait consensus block
    economic.wait_consensus_blocknum(node)
    # create account
    report_address, _ = economic.account.generate_account(
        node.web3, node.web3.toWei(1000, 'ether'))
    # Verify changed parameters
    current_block = node.eth.blockNumber
    log.info("Current block height: {}".format(current_block))
    # Verify changed parameters report
    duplicate_sign(first_client, report_address, current_block)
    # assret penalty amount
    assret_penalty_amount(clients_consensus, first_pledge_amount)
def test_PIP_PVF_001_002(clients_consensus, mark, reset_environment):
    """
    PIP_PVF_001:治理修改低0出块率扣除验证人自有质押金块数投票失败
    PIP_PVF_002:理修改低0出块率扣除验证人自有质押金块数成功处于未生效期
    :param clients_consensus:
    :return:
    """
    index = 0
    first_client = clients_consensus[index]
    # get pledge amount1 and block reward
    first_pledge_amount, block_reward, first_slash_blocks = information_before_slash_blocks(
        first_client)
    # create Parametric proposal
    param_governance_verify_before_endblock(first_client, 'slashing',
                                            'slashBlocksReward', '0', mark)
    # Get governable parameters again
    second_slash_blocks = get_governable_parameter_value(
        first_client, 'slashBlocksReward')
    assert first_slash_blocks == second_slash_blocks, "ErrMsg:slash blocks {}".format(
        second_slash_blocks)
    # Verify changed parameters
    verify_changed_parameters(clients_consensus, first_pledge_amount,
                              block_reward, first_slash_blocks)