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)
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)
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)
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
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)
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
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)
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)
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)
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
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)
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)
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)
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)
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)