github.com/platonnetwork/platon-go@v0.7.6/cases/tests/govern/test_voting_statistics.py (about)

     1  import pytest
     2  import allure
     3  from common.log import log
     4  from common.key import mock_duplicate_sign
     5  import time
     6  from tests.lib.utils import assert_code, wait_block_number, upload_platon
     7  from tests.lib.client import Client
     8  from tests.lib import Genesis
     9  from dacite import from_dict
    10  from tests.govern.conftest import proposal_vote, version_proposal_vote
    11  
    12  
    13  def submitvpandvote(clients, votingrounds=2, version=None):
    14      pip = clients[0].pip
    15      if version is None:
    16          version = pip.cfg.version5
    17      result = pip.submitVersion(pip.node.node_id, str(time.time()), version, votingrounds, pip.node.staking_address,
    18                                 transaction_cfg=pip.cfg.transaction_cfg)
    19      log.info('Submit version proposal result : {}'.format(result))
    20      assert_code(result, 0)
    21      proposalinfo = pip.get_effect_proposal_info_of_vote()
    22      log.info('Version proposal info {}'.format(proposalinfo))
    23      for index in range(len(clients)):
    24          pip = clients[index].pip
    25          result = version_proposal_vote(pip, vote_option=pip.cfg.vote_option_yeas)
    26          log.info('Node {} vote result {}'.format(pip.node.node_id, result))
    27          assert_code(result, 0)
    28  
    29  
    30  def createstaking(obj, platon_bin=None):
    31      if isinstance(obj, Client):
    32          objs = []
    33          objs.append(obj)
    34          obj = objs
    35      for client in obj:
    36          if platon_bin:
    37              log.info('Need replace the platon of the node')
    38              upload_platon(client.node, platon_bin)
    39              client.node.restart()
    40  
    41          address, _ = client.economic.account.generate_account(client.node.web3, 10 ** 18 * 10000000)
    42          result = client.staking.create_staking(0, address, address, amount=10 ** 18 * 2000000,
    43                                                 transaction_cfg=client.pip.cfg.transaction_cfg)
    44          log.info('Node {} staking result : {}'.format(client.node.node_id, result))
    45          assert_code(result, 0)
    46  
    47  
    48  def submitppandvote(clients, *args):
    49      pip = clients[0].pip
    50      result = pip.submitParam(pip.node.node_id, str(time.time()), 'slashing', 'slashBlocksReward', '83',
    51                               pip.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
    52      log.info('Submit param proposal result : {}'.format(result))
    53      assert_code(result, 0)
    54      proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
    55      log.info('Param proposal info {}'.format(proposalinfo))
    56      for index in range(len(clients)):
    57          pip = clients[index].pip
    58          log.info('{}'.format(args[index]))
    59          result = proposal_vote(pip, vote_option=args[index])
    60          assert_code(result, 0)
    61  
    62  
    63  def submitcppandvote(clients, list, voting_rounds=2):
    64      pip = clients[0].pip
    65      result = pip.submitParam(pip.node.node_id, str(time.time()), 'slashing', 'slashBlocksReward', '83',
    66                               pip.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
    67      log.info('Submit param proposal result : {}'.format(result))
    68      assert_code(result, 0)
    69      proposalinfo_param = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
    70      log.info('Param proposal info {}'.format(proposalinfo_param))
    71  
    72      result = pip.submitCancel(pip.node.node_id, str(time.time()), voting_rounds, proposalinfo_param.get('ProposalID'),
    73                                pip.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
    74      log.info('Submit cancel proposal result : {}'.format(result))
    75      assert_code(result, 0)
    76      proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
    77      log.info('Cancel proposal info {}'.format(proposalinfo_cancel))
    78      for index in range(len(clients)):
    79          pip = clients[index].pip
    80          log.info('Vote option {}'.format(list[index]))
    81          result = pip.vote(pip.node.node_id, proposalinfo_cancel.get('ProposalID'), list[index],
    82                            pip.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
    83          log.info('Node {} vote cancel proposal result : {}'.format(pip.node.node_id, result))
    84          assert_code(result, 0)
    85  
    86  
    87  def submitcvpandvote(clients, *args):
    88      pip = clients[0].pip
    89      result = pip.submitVersion(pip.node.node_id, str(time.time()), pip.cfg.version5, 3,
    90                                 pip.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
    91      log.info('Submit version proposal result : {}'.format(result))
    92      assert_code(result, 0)
    93      proposalinfo_version = pip.get_effect_proposal_info_of_vote(pip.cfg.version_proposal)
    94      log.info('Version proposal info {}'.format(proposalinfo_version))
    95  
    96      result = pip.submitCancel(pip.node.node_id, str(time.time()), 1, proposalinfo_version.get('ProposalID'),
    97                                pip.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
    98      log.info('Submit cancel proposal result : {}'.format(result))
    99      assert_code(result, 0)
   100      proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   101      log.info('Cancel proposal info {}'.format(proposalinfo_cancel))
   102      for index in range(len(clients)):
   103          pip = clients[index].pip
   104          log.info('{}'.format(args[index]))
   105          result = pip.vote(pip.node.node_id, proposalinfo_cancel.get('ProposalID'), args[index],
   106                            pip.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
   107          log.info('Node {} vote cancel proposal result : {}'.format(pip.node.node_id, result))
   108          assert_code(result, 0)
   109  
   110  
   111  def submittpandvote(clients, *args):
   112      pip = clients[0].pip
   113      result = pip.submitText(pip.node.node_id, str(time.time()), pip.node.staking_address,
   114                              transaction_cfg=pip.cfg.transaction_cfg)
   115      log.info('Submit text proposal result : {}'.format(result))
   116      assert_code(result, 0)
   117      proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   118      log.info('Text proposal info {}'.format(proposalinfo_text))
   119  
   120      for index in range(len(clients)):
   121          pip = clients[index].pip
   122          log.info('{}'.format(args[index]))
   123          result = pip.vote(pip.node.node_id, proposalinfo_text.get('ProposalID'), args[index],
   124                            pip.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
   125          log.info('Node {} vote text proposal result : {}'.format(pip.node.node_id, result))
   126          assert_code(result, 0)
   127  
   128  
   129  class TestVotingStatisticsVP:
   130      @pytest.mark.compatibility
   131      @pytest.mark.P0
   132      @allure.title('Version proposal statistics function verification')
   133      def test_VS_EXV_001_VS_BL_1(self, new_genesis_env, clients_consensus, clients_noconsensus):
   134          new_genesis_env.deploy_all()
   135          submitvpandvote(clients_consensus[0:-1])
   136          proposalinfo = clients_consensus[0].pip.get_effect_proposal_info_of_vote(clients_consensus[0].pip.cfg.version_proposal)
   137          log.info('Version proposal information {}'.format(proposalinfo))
   138          createstaking(clients_noconsensus[:3])
   139          wait_block_number(clients_consensus[0].node, proposalinfo.get('EndVotingBlock'))
   140          result = clients_consensus[0].pip.get_accuverifiers_count(proposalinfo.get('ProposalID'))
   141          log.info('Get proposal vote infomation {}'.format(result))
   142          assert result == [4, 3, 0, 0]
   143          assert clients_consensus[0].pip.get_status_of_proposal(proposalinfo.get('ProposalID')) == 4
   144          assert clients_consensus[0].pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == 3
   145          assert clients_consensus[0].pip.get_nays_of_proposal(proposalinfo.get('ProposalID')) == 0
   146          assert clients_consensus[0].pip.get_abstentions_of_proposal(proposalinfo.get('ProposalID')) == 0
   147          assert clients_consensus[0].pip.get_accu_verifiers_of_proposal(proposalinfo.get('ProposalID')) == len(
   148              clients_consensus)
   149  
   150      @pytest.mark.P1
   151      @allure.title('Version proposal statistics function verification')
   152      def test_VS_EXV_002(self, new_genesis_env, clients_consensus, clients_noconsensus):
   153          new_genesis_env.deploy_all()
   154          pip = clients_consensus[0].pip
   155          submitvpandvote(clients_consensus[:2], votingrounds=5)
   156          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.version_proposal)
   157          log.info('Version proposal info {}'.format(proposalinfo))
   158          log.info('{}'.format(clients_consensus[:2]))
   159          createstaking(clients_noconsensus[:2])
   160          pip.economic.wait_settlement_blocknum(pip.node)
   161          result = pip.get_accuverifiers_count(proposalinfo.get('ProposalID'))
   162          log.info('Get proposal vote infomation {}'.format(result))
   163          assert result == [6, 2, 0, 0]
   164  
   165          result = version_proposal_vote(clients_consensus[2].pip)
   166          assert_code(result, 0)
   167          createstaking(clients_noconsensus[2])
   168          wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
   169          result = pip.get_accuverifiers_count(proposalinfo.get('ProposalID'))
   170          log.info('Get proposal vote infomation {}'.format(result))
   171          assert result == [6, 3, 0, 0]
   172          assert clients_consensus[0].pip.get_status_of_proposal(proposalinfo.get('ProposalID')) == 3
   173          assert clients_consensus[0].pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == 3
   174          assert clients_consensus[0].pip.get_nays_of_proposal(proposalinfo.get('ProposalID')) == 0
   175          assert clients_consensus[0].pip.get_abstentions_of_proposal(proposalinfo.get('ProposalID')) == 0
   176          assert clients_consensus[0].pip.get_accu_verifiers_of_proposal(proposalinfo.get('ProposalID')) == 6
   177  
   178      @pytest.mark.P2
   179      @allure.title('Version proposal statistics function verification')
   180      def test_VS_EXV_003(self, new_genesis_env, clients_consensus, clients_noconsensus):
   181          new_genesis_env.deploy_all()
   182          submitvpandvote(clients_consensus[:1], votingrounds=9)
   183          proposalinfo = clients_consensus[0].pip.get_effect_proposal_info_of_vote(clients_consensus[0].pip.cfg.version_proposal)
   184          log.info('Version proposal info {}'.format(proposalinfo))
   185          createstaking(clients_noconsensus[0])
   186          clients_consensus[0].pip.economic.wait_settlement_blocknum(clients_consensus[0].pip.node)
   187          result = clients_consensus[0].pip.get_accuverifiers_count(proposalinfo.get('ProposalID'))
   188          log.info('Get proposal vote infomation {}'.format(result))
   189          assert result == [5, 1, 0, 0]
   190  
   191          result = version_proposal_vote(clients_consensus[1].pip, clients_consensus[0].pip.cfg.vote_option_yeas)
   192          assert_code(result, 0)
   193          createstaking(clients_noconsensus[1])
   194          clients_consensus[0].pip.economic.wait_settlement_blocknum(clients_consensus[0].pip.node)
   195          result = clients_consensus[0].pip.get_accuverifiers_count(proposalinfo.get('ProposalID'))
   196          log.info('Get proposal vote infomation {}'.format(result))
   197          assert result == [6, 2, 0, 0]
   198  
   199          result = version_proposal_vote(clients_consensus[2].pip, clients_consensus[0].pip.cfg.vote_option_yeas)
   200          assert_code(result, 0)
   201          createstaking(clients_noconsensus[2])
   202          wait_block_number(clients_consensus[0].pip.node, proposalinfo.get('EndVotingBlock'))
   203  
   204          result = clients_consensus[0].pip.get_accuverifiers_count(proposalinfo.get('ProposalID'))
   205          log.info('Get proposal vote infomation {}'.format(result))
   206          assert result == [6, 3, 0, 0]
   207          assert clients_consensus[0].pip.get_status_of_proposal(proposalinfo.get('ProposalID')) == 3
   208          assert clients_consensus[0].pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == 3
   209          assert clients_consensus[0].pip.get_nays_of_proposal(proposalinfo.get('ProposalID')) == 0
   210          assert clients_consensus[0].pip.get_abstentions_of_proposal(proposalinfo.get('ProposalID')) == 0
   211          assert clients_consensus[0].pip.get_accu_verifiers_of_proposal(proposalinfo.get('ProposalID')) == 6
   212  
   213      @pytest.mark.P2
   214      @allure.title('Version proposal statistics function verification')
   215      def test_VS_EXV_004(self, new_genesis_env, clients_consensus):
   216          genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
   217          genesis.economicModel.gov.versionProposalSupportRate = 0.25
   218          new_genesis_env.set_genesis(genesis.to_dict())
   219          new_genesis_env.deploy_all()
   220          submitvpandvote(clients_consensus[:2])
   221          proposalinfo = clients_consensus[0].pip.get_effect_proposal_info_of_vote(clients_consensus[0].pip.cfg.version_proposal)
   222          log.info('Get version proposal information {}'.format(proposalinfo))
   223          result = clients_consensus[0].staking.withdrew_staking(clients_consensus[0].node.staking_address)
   224          log.info('Node {} withdrew staking result {}'.format(clients_consensus[0].node.node_id, result))
   225          assert_code(result, 0)
   226          wait_block_number(clients_consensus[0].node, proposalinfo.get('EndVotingBlock'))
   227          result = clients_consensus[0].pip.get_accuverifiers_count(proposalinfo.get('ProposalID'))
   228          log.info('Get proposal vote infomation {}'.format(result))
   229          assert result == [4, 2, 0, 0]
   230          assert clients_consensus[0].pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == 2
   231          assert clients_consensus[0].pip.get_status_of_proposal(proposalinfo.get('ProposalID')) == 4
   232  
   233      @pytest.mark.P2
   234      @allure.title('Version proposal statistics function verification')
   235      def test_VS_EXV_005(self, new_genesis_env, clients_consensus):
   236          genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
   237          genesis.economicModel.gov.versionProposalSupportRate = 0.5
   238          new_genesis_env.set_genesis(genesis.to_dict())
   239          new_genesis_env.deploy_all()
   240          submitvpandvote(clients_consensus[:2])
   241          pip = clients_consensus[0].pip
   242          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.version_proposal)
   243          log.info('Get version proposal information {}'.format(proposalinfo))
   244          wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
   245          report_information = mock_duplicate_sign(1, pip.node.nodekey, pip.node.blsprikey,
   246                                                   proposalinfo.get('EndVotingBlock') - 10)
   247          log.info("Report information: {}".format(report_information))
   248          address, _ = pip.economic.account.generate_account(pip.node.web3, 10**18 * 1000)
   249          result = clients_consensus[0].duplicatesign.reportDuplicateSign(1, report_information, address)
   250          assert_code(result, 0)
   251          assert clients_consensus[1].pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == 2
   252  
   253      @pytest.mark.P2
   254      @allure.title('Version proposal statistics function verification')
   255      def test_VS_EXV_006(self, new_genesis_env, clients_consensus):
   256          genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
   257          genesis.economicModel.gov.versionProposalSupportRate = 0.5
   258          new_genesis_env.set_genesis(genesis.to_dict())
   259          new_genesis_env.deploy_all()
   260          submitvpandvote(clients_consensus[:2])
   261          pip = clients_consensus[0].pip
   262          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.version_proposal)
   263          log.info('Get version proposal information {}'.format(proposalinfo))
   264          wait_block_number(pip.node, 80)
   265          report_information = mock_duplicate_sign(1, pip.node.nodekey, pip.node.blsprikey, 70)
   266          log.info("Report information: {}".format(report_information))
   267          address, _ = pip.economic.account.generate_account(pip.node.web3, 10**18 * 1000)
   268          result = clients_consensus[0].duplicatesign.reportDuplicateSign(1, report_information, address)
   269          assert_code(result, 0)
   270          wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
   271          assert clients_consensus[0].pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == 1
   272          assert clients_consensus[0].pip.get_status_of_proposal(proposalinfo.get('ProposalID')) == 3
   273  
   274      @pytest.mark.P2
   275      @allure.title('Version proposal statistics function verification')
   276      def test_VS_EXV_007(self, new_genesis_env, clients_consensus):
   277          genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
   278          genesis.economicModel.gov.versionProposalSupportRate = 0.5
   279          new_genesis_env.set_genesis(genesis.to_dict())
   280          new_genesis_env.deploy_all()
   281          submitvpandvote(clients_consensus[:2])
   282          pip = clients_consensus[0].pip
   283          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.version_proposal)
   284          log.info('Get version proposal information {}'.format(proposalinfo))
   285          wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
   286          report_information = mock_duplicate_sign(2, pip.node.nodekey, pip.node.blsprikey,
   287                                                   proposalinfo.get('EndVotingBlock') - 10)
   288          log.info("Report information: {}".format(report_information))
   289          address, _ = pip.economic.account.generate_account(pip.node.web3, 10**18 * 1000)
   290          result = clients_consensus[0].duplicatesign.reportDuplicateSign(2, report_information, address)
   291          assert_code(result, 0)
   292          assert clients_consensus[1].pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == 2
   293  
   294      @pytest.mark.P2
   295      @allure.title('Version proposal statistics function verification')
   296      def test_VS_EXV_008(self, new_genesis_env, clients_consensus):
   297          genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
   298          genesis.economicModel.gov.versionProposalSupportRate = 0.5
   299          new_genesis_env.set_genesis(genesis.to_dict())
   300          new_genesis_env.deploy_all()
   301          submitvpandvote(clients_consensus[:2])
   302          pip = clients_consensus[0].pip
   303          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.version_proposal)
   304          log.info('Get version proposal information {}'.format(proposalinfo))
   305          wait_block_number(pip.node, 80)
   306          report_information = mock_duplicate_sign(2, pip.node.nodekey, pip.node.blsprikey, 70)
   307          log.info("Report information: {}".format(report_information))
   308          address, _ = pip.economic.account.generate_account(pip.node.web3, 10**18 * 1000)
   309          result = clients_consensus[0].duplicatesign.reportDuplicateSign(2, report_information, address)
   310          assert_code(result, 0)
   311          wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
   312          assert clients_consensus[0].pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == 1
   313          assert clients_consensus[0].pip.get_status_of_proposal(proposalinfo.get('ProposalID')) == 3
   314  
   315      @pytest.mark.P2
   316      @allure.title('Version proposal statistics function verification')
   317      def test_VS_EXV_009(self, new_genesis_env, clients_consensus):
   318          genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
   319          genesis.economicModel.gov.versionProposalSupportRate = 0.5
   320          new_genesis_env.set_genesis(genesis.to_dict())
   321          new_genesis_env.deploy_all()
   322          submitvpandvote(clients_consensus[:2], votingrounds=3)
   323          pip = clients_consensus[0].pip
   324          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.version_proposal)
   325          log.info('Get version proposal information {}'.format(proposalinfo))
   326          assert pip.get_accuverifiers_count(proposalinfo.get('ProposalID')) == [4, 2, 0, 0]
   327          log.info('Stop the node {}'.format(pip.node.node_id))
   328          pip.node.stop()
   329          wait_block_number(clients_consensus[1].node, proposalinfo.get('EndVotingBlock'))
   330          assert clients_consensus[1].pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == 1
   331          assert clients_consensus[1].pip.get_status_of_proposal(proposalinfo.get('ProposalID')) == 3
   332  
   333      @pytest.mark.P2
   334      @allure.title('Version proposal statistics function verification')
   335      def test_VS_EXV_010(self, new_genesis_env, clients_consensus):
   336          genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
   337          genesis.economicModel.gov.versionProposalSupportRate = 0.5
   338          new_genesis_env.set_genesis(genesis.to_dict())
   339          new_genesis_env.deploy_all()
   340          submitvpandvote(clients_consensus[:2], votingrounds=3)
   341          pip = clients_consensus[0].pip
   342          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.version_proposal)
   343          log.info('Get version proposal information {}'.format(proposalinfo))
   344          assert pip.get_accuverifiers_count(proposalinfo.get('ProposalID')) == [4, 2, 0, 0]
   345          log.info('Stop the node {}'.format(pip.node.node_id))
   346          wait_block_number(clients_consensus[1].node, proposalinfo.get('EndVotingBlock') - 10)
   347          pip.node.stop()
   348          wait_block_number(clients_consensus[1].node, proposalinfo.get('EndVotingBlock'))
   349          assert clients_consensus[1].pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == 2
   350          assert clients_consensus[1].pip.get_status_of_proposal(proposalinfo.get('ProposalID')) == 4
   351  
   352  
   353  class TestVotingStatisticsTPCP:
   354      @pytest.mark.P1
   355      @allure.title('Cancel proposal and text proposal statistics function verification')
   356      def test_VS_EXT_001_VS_EXC_001(self, new_genesis_env, clients_consensus, clients_noconsensus):
   357          genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
   358          genesis.economicModel.gov.textProposalVoteDurationSeconds = 120
   359          new_genesis_env.set_genesis(genesis.to_dict())
   360          new_genesis_env.deploy_all()
   361          submittpandvote(clients_consensus[0:-1], 1, 2, 3)
   362          submitcppandvote(clients_consensus[0:-1], [1, 2, 3])
   363          proposalinfo_text = clients_consensus[0].pip.get_effect_proposal_info_of_vote(
   364              clients_consensus[0].pip.cfg.text_proposal)
   365          log.info('Text proposal information {}'.format(proposalinfo_text))
   366          proposalinfo_cancel = clients_consensus[0].pip.get_effect_proposal_info_of_vote(
   367              clients_consensus[0].pip.cfg.cancel_proposal)
   368          log.info('Cancel proposal information {}'.format(proposalinfo_cancel))
   369          createstaking(clients_noconsensus[:3])
   370          result_text = clients_consensus[0].pip.get_accuverifiers_count(proposalinfo_text.get('ProposalID'))
   371          log.info('Get text proposal vote infomation {}'.format(result_text))
   372          result_cancel = clients_consensus[0].pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID'))
   373          log.info('Get cancel proposal vote infomation {}'.format(result_cancel))
   374          assert result_text == [4, 1, 1, 1]
   375          assert result_cancel == [4, 1, 1, 1]
   376  
   377      @pytest.mark.P1
   378      @allure.title('Cancel proposal and text proposal statistics function verification')
   379      def test_VS_EXT_002_VS_EXC_002(self, new_genesis_env, clients_consensus, clients_noconsensus):
   380          genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
   381          genesis.economicModel.gov.textProposalVoteDurationSeconds = 200
   382          genesis.economicModel.gov.paramProposalVoteDurationSeconds = 1000
   383          new_genesis_env.set_genesis(genesis.to_dict())
   384          new_genesis_env.deploy_all()
   385          pip = clients_consensus[0].pip
   386          submittpandvote(clients_consensus[:2], 1, 2)
   387          submitcppandvote(clients_consensus[:2], [1, 2], voting_rounds=5)
   388          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   389          log.info('Text proposal info {}'.format(proposalinfo_text))
   390          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   391          log.info('Cancel proposal info {}'.format(proposalinfo_cancel))
   392          createstaking(clients_noconsensus[:2])
   393          pip.economic.wait_settlement_blocknum(pip.node)
   394          result_text = pip.get_accuverifiers_count(proposalinfo_text.get('ProposalID'))
   395          log.info('Get text proposal vote infomation {}'.format(result_text))
   396          result_cancel = pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID'))
   397          log.info('Get cancel proposal vote infomation {}'.format(result_cancel))
   398          assert result_text == [6, 1, 1, 0]
   399          assert result_cancel == [6, 1, 1, 0]
   400  
   401          result_cancel = proposal_vote(clients_consensus[2].pip, vote_option=pip.cfg.vote_option_Abstentions,
   402                                        proposaltype=pip.cfg.cancel_proposal)
   403          assert_code(result_cancel, 0)
   404          result_text = proposal_vote(clients_consensus[2].pip, vote_option=pip.cfg.vote_option_Abstentions,
   405                                      proposaltype=pip.cfg.text_proposal)
   406          assert_code(result_text, 0)
   407          createstaking(clients_noconsensus[2])
   408          wait_block_number(pip.node, proposalinfo_text.get('EndVotingBlock'))
   409  
   410          result_cancel = pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID'))
   411          log.info('Get proposal vote infomation {}'.format(result_cancel))
   412          result_text = pip.get_accuverifiers_count(proposalinfo_text.get('ProposalID'))
   413          log.info('Get proposal vote infomation {}'.format(result_text))
   414  
   415          assert result_text == [6, 1, 1, 1]
   416          assert result_cancel == [6, 1, 1, 1]
   417  
   418      @pytest.mark.P2
   419      @allure.title('Cancel proposal and text proposal statistics function verification')
   420      def test_VS_EXT_003_VS_EXC_003(self, new_genesis_env, clients_consensus, clients_noconsensus):
   421          genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
   422          genesis.economicModel.gov.textProposalVoteDurationSeconds = 360
   423          genesis.economicModel.gov.paramProposalVoteDurationSeconds = 600
   424          new_genesis_env.set_genesis(genesis.to_dict())
   425          new_genesis_env.deploy_all()
   426          pip = clients_consensus[0].pip
   427          submittpandvote(clients_consensus[:1], 1)
   428          submitcppandvote(clients_consensus[:1], [1], voting_rounds=9)
   429          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   430          log.info('Text proposal info {}'.format(proposalinfo_text))
   431  
   432          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   433          log.info('Cancel proposal info {}'.format(proposalinfo_cancel))
   434          createstaking(clients_noconsensus[0])
   435          pip.economic.wait_settlement_blocknum(pip.node)
   436          result_text = pip.get_accuverifiers_count(proposalinfo_text.get('ProposalID'))
   437          log.info('Get proposal vote infomation {}'.format(result_text))
   438          result_cancel = pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID'))
   439          log.info('Get proposal vote infomation {}'.format(result_cancel))
   440          assert result_text == [5, 1, 0, 0]
   441          assert result_cancel == [5, 1, 0, 0]
   442  
   443          result = proposal_vote(clients_consensus[1].pip, vote_option=pip.cfg.vote_option_nays,
   444                                 proposaltype=pip.cfg.cancel_proposal)
   445          assert_code(result, 0)
   446          result = proposal_vote(clients_consensus[1].pip, vote_option=pip.cfg.vote_option_nays,
   447                                 proposaltype=pip.cfg.text_proposal)
   448          assert_code(result, 0)
   449          createstaking(clients_noconsensus[1])
   450          pip.economic.wait_settlement_blocknum(pip.node)
   451          result_cancel = pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID'))
   452          log.info('Get proposal vote infomation {}'.format(result_cancel))
   453          result_text = pip.get_accuverifiers_count(proposalinfo_text.get('ProposalID'))
   454          log.info('Get proposal vote infomation {}'.format(result_text))
   455          assert result_text == [6, 1, 1, 0]
   456          assert result_cancel == [6, 1, 1, 0]
   457  
   458          result = proposal_vote(clients_consensus[2].pip, vote_option=pip.cfg.vote_option_Abstentions,
   459                                 proposaltype=pip.cfg.text_proposal)
   460          assert_code(result, 0)
   461          result = proposal_vote(clients_consensus[2].pip, vote_option=pip.cfg.vote_option_Abstentions,
   462                                 proposaltype=pip.cfg.cancel_proposal)
   463          assert_code(result, 0)
   464          createstaking(clients_noconsensus[2])
   465          # wait_block_number(clients_consensus[0].pip.node, proposalinfo.get('EndVotingBlock'))
   466  
   467          result_text = clients_consensus[0].pip.get_accuverifiers_count(proposalinfo_text.get('ProposalID'))
   468          log.info('Get proposal vote infomation {}'.format(result_text))
   469          result_cancel = clients_consensus[0].pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID'))
   470          log.info('Get proposal vote infomation {}'.format(result_cancel))
   471          assert result_cancel == [6, 1, 1, 1]
   472          assert result_text == [6, 1, 1, 1]
   473  
   474      def get_block(self, proposalinfo_text, proposalinfo_cancel):
   475          block1 = proposalinfo_cancel.get('EndVotingBlock')
   476          block2 = proposalinfo_text.get('EndVotingBlock')
   477          if block1 > block2:
   478              return block1
   479          else:
   480              return block2
   481  
   482      def update_setting(self, new_genesis_env, *args):
   483          genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
   484          genesis.economicModel.gov.paramProposalVoteDurationSeconds = args[0]
   485          genesis.economicModel.gov.textProposalVoteDurationSeconds = args[1]
   486          genesis.economicModel.gov.textProposalSupportRate = args[2]
   487          genesis.economicModel.gov.textProposalVoteRate = args[3]
   488          genesis.economicModel.gov.cancelProposalSupportRate = args[4]
   489          genesis.economicModel.gov.cancelProposalVoteRate = args[5]
   490          new_genesis_env.set_genesis(genesis.to_dict())
   491          new_genesis_env.deploy_all()
   492  
   493      @pytest.mark.P2
   494      @allure.title('Cancel proposal and text proposal statistics function verification')
   495      def test_VS_EXT_004_VS_EXC_004(self, new_genesis_env, clients_consensus):
   496          self.update_setting(new_genesis_env, 500, 80, 1, 0.499, 1, 0.499)
   497          pip = clients_consensus[0].pip
   498          submittpandvote(clients_consensus[:2], 1, 1)
   499          submitcppandvote(clients_consensus[:2], [1, 1])
   500          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   501          log.info('Get text proposal information {}'.format(proposalinfo_text))
   502          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   503          log.info('Get cancel proposal information {}'.format(proposalinfo_cancel))
   504          result = clients_consensus[0].staking.withdrew_staking(clients_consensus[0].node.staking_address)
   505          log.info('Node {} withdrew staking result {}'.format(clients_consensus[0].node.node_id, result))
   506          assert_code(result, 0)
   507          wait_block_number(clients_consensus[0].node, self.get_block(proposalinfo_cancel, proposalinfo_text))
   508          assert_code(pip.get_yeas_of_proposal(proposalinfo_text.get('ProposalID')), 2)
   509          assert_code(pip.get_status_of_proposal(proposalinfo_text.get('ProposalID')), 2)
   510          assert_code(pip.get_yeas_of_proposal(proposalinfo_cancel.get('ProposalID')), 2)
   511          assert_code(pip.get_status_of_proposal(proposalinfo_cancel.get('ProposalID')), 2)
   512  
   513      @pytest.mark.P2
   514      @allure.title('Cancel proposal and text proposal statistics function verification')
   515      def test_VS_EXT_005_VS_EXC_005(self, new_genesis_env, clients_consensus):
   516          self.update_setting(new_genesis_env, 500, 80, 1, 0.499, 1, 0.499)
   517          pip = clients_consensus[0].pip
   518          submittpandvote(clients_consensus[:2], 1, 1)
   519          submitcppandvote(clients_consensus[:2], [1, 1])
   520          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   521          log.info('Get cancel proposal information {}'.format(proposalinfo_cancel))
   522          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   523          log.info('Get text proposal information {}'.format(proposalinfo_text))
   524          wait_block_number(pip.node, self.get_block(proposalinfo_text, proposalinfo_cancel))
   525          report_information = mock_duplicate_sign(1, pip.node.nodekey, pip.node.blsprikey,
   526                                                   proposalinfo_cancel.get('EndVotingBlock') - 10)
   527          log.info("Report information: {}".format(report_information))
   528          address, _ = pip.economic.account.generate_account(pip.node.web3, 10 ** 18 * 1000)
   529          result = clients_consensus[0].duplicatesign.reportDuplicateSign(1, report_information, address)
   530          assert_code(result, 0)
   531          assert_code(pip.get_yeas_of_proposal(proposalinfo_cancel.get('ProposalID')), 2)
   532          assert_code(pip.get_yeas_of_proposal(proposalinfo_text.get('ProposalID')), 2)
   533          assert_code(pip.get_status_of_proposal(proposalinfo_cancel.get('ProposalID')), 2)
   534          assert_code(pip.get_status_of_proposal(proposalinfo_text.get('ProposalID')), 2)
   535  
   536      @pytest.mark.P2
   537      @allure.title('Cancel proposal and text proposal statistics function verification')
   538      def test_VS_EXT_006_VS_EXC_006(self, new_genesis_env, clients_consensus):
   539          self.update_setting(new_genesis_env, 500, 80, 1, 0.499, 1, 0.499)
   540          pip = clients_consensus[0].pip
   541          submittpandvote(clients_consensus[:2], 1, 1)
   542          submitcppandvote(clients_consensus[:2], [1, 1])
   543          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   544          log.info('Get cancel proposal information {}'.format(proposalinfo_cancel))
   545          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   546          log.info('Get text proposal information {}'.format(proposalinfo_text))
   547          wait_block_number(pip.node, 50)
   548          report_information = mock_duplicate_sign(1, pip.node.nodekey, pip.node.blsprikey, 45)
   549          log.info("Report information: {}".format(report_information))
   550          address, _ = pip.economic.account.generate_account(pip.node.web3, 10 ** 18 * 1000)
   551          result = clients_consensus[0].duplicatesign.reportDuplicateSign(1, report_information, address)
   552          assert_code(result, 0)
   553          wait_block_number(pip.node, self.get_block(proposalinfo_cancel, proposalinfo_text))
   554          assert_code(pip.get_yeas_of_proposal(proposalinfo_cancel.get('ProposalID')), 1)
   555          assert_code(pip.get_yeas_of_proposal(proposalinfo_text.get('ProposalID')), 1)
   556          assert_code(pip.get_status_of_proposal(proposalinfo_cancel.get('ProposalID')), 3)
   557          assert_code(pip.get_status_of_proposal(proposalinfo_text.get('ProposalID')), 3)
   558  
   559      @pytest.mark.P2
   560      @allure.title('Cancel proposal and text proposal statistics function verification')
   561      def test_VS_EXT_007_VS_EXC_007(self, new_genesis_env, clients_consensus):
   562          self.update_setting(new_genesis_env, 500, 80, 1, 0.249, 1, 0.249)
   563          pip = clients_consensus[0].pip
   564          submittpandvote(clients_consensus[:2], 2, 1)
   565          submitcppandvote(clients_consensus[:2], [2, 1])
   566          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   567          log.info('Get cancel proposal information {}'.format(proposalinfo_cancel))
   568          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   569          log.info('Get text proposal information {}'.format(proposalinfo_text))
   570          wait_block_number(pip.node, 50)
   571          report_information = mock_duplicate_sign(1, pip.node.nodekey, pip.node.blsprikey, 45)
   572          log.info("Report information: {}".format(report_information))
   573          address, _ = pip.economic.account.generate_account(pip.node.web3, 10 ** 18 * 1000)
   574          result = clients_consensus[0].duplicatesign.reportDuplicateSign(1, report_information, address)
   575          assert_code(result, 0)
   576          wait_block_number(pip.node, self.get_block(proposalinfo_cancel, proposalinfo_text))
   577          assert pip.get_accuverifiers_count(proposalinfo_text.get('ProposalID')) == [4, 1, 0, 0]
   578          assert pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 0, 0]
   579          assert_code(pip.get_status_of_proposal(proposalinfo_cancel.get('ProposalID')), 2)
   580          assert_code(pip.get_status_of_proposal(proposalinfo_text.get('ProposalID')), 2)
   581  
   582      @pytest.mark.P2
   583      @allure.title('Cancel proposal and text proposal statistics function verification')
   584      def test_VS_EXT_008_VS_EXC_008(self, new_genesis_env, clients_consensus):
   585          self.update_setting(new_genesis_env, 500, 80, 1, 0.249, 1, 0.249)
   586          pip = clients_consensus[0].pip
   587          submittpandvote(clients_consensus[:2], 3, 1)
   588          submitcppandvote(clients_consensus[:2], [3, 1])
   589          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   590          log.info('Get cancel proposal information {}'.format(proposalinfo_cancel))
   591          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   592          log.info('Get text proposal information {}'.format(proposalinfo_text))
   593          wait_block_number(pip.node, 50)
   594          report_information = mock_duplicate_sign(1, pip.node.nodekey, pip.node.blsprikey, 45)
   595          log.info("Report information: {}".format(report_information))
   596          address, _ = pip.economic.account.generate_account(pip.node.web3, 10 ** 18 * 1000)
   597          result = clients_consensus[0].duplicatesign.reportDuplicateSign(1, report_information, address)
   598          assert_code(result, 0)
   599          wait_block_number(pip.node, self.get_block(proposalinfo_cancel, proposalinfo_text))
   600          assert pip.get_accuverifiers_count(proposalinfo_text.get('ProposalID')) == [4, 1, 0, 0]
   601          assert pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 0, 0]
   602          assert_code(pip.get_status_of_proposal(proposalinfo_cancel.get('ProposalID')), 2)
   603          assert_code(pip.get_status_of_proposal(proposalinfo_text.get('ProposalID')), 2)
   604  
   605      @pytest.mark.P2
   606      @allure.title('Cancel proposal and text proposal statistics function verification')
   607      def test_VS_EXT_009_VS_EXC_009(self, new_genesis_env, clients_consensus):
   608          self.update_setting(new_genesis_env, 500, 80, 1, 0.249, 1, 0.249)
   609          pip = clients_consensus[0].pip
   610          submittpandvote(clients_consensus[:2], 2, 1)
   611          submitcppandvote(clients_consensus[:2], [2, 1])
   612          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   613          log.info('Get cancel proposal information {}'.format(proposalinfo_cancel))
   614          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   615          log.info('Get text proposal information {}'.format(proposalinfo_text))
   616          wait_block_number(pip.node, self.get_block(proposalinfo_cancel, proposalinfo_text))
   617          report_information = mock_duplicate_sign(1, pip.node.nodekey, pip.node.blsprikey, 45)
   618          log.info("Report information: {}".format(report_information))
   619          address, _ = pip.economic.account.generate_account(pip.node.web3, 10 ** 18 * 1000)
   620          result = clients_consensus[0].duplicatesign.reportDuplicateSign(1, report_information, address)
   621          assert_code(result, 0)
   622          assert pip.get_accuverifiers_count(proposalinfo_text.get('ProposalID')) == [4, 1, 1, 0]
   623          assert pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 1, 0]
   624          assert_code(pip.get_status_of_proposal(proposalinfo_cancel.get('ProposalID')), 3)
   625          assert_code(pip.get_status_of_proposal(proposalinfo_text.get('ProposalID')), 3)
   626  
   627      @pytest.mark.P2
   628      @allure.title('Cancel proposal and text proposal statistics function verification')
   629      def test_VS_EXT_010_VS_EXC_010(self, new_genesis_env, clients_consensus):
   630          self.update_setting(new_genesis_env, 500, 80, 1, 0.499, 1, 0.499)
   631          pip = clients_consensus[0].pip
   632          submittpandvote(clients_consensus[:2], 1, 1)
   633          submitcppandvote(clients_consensus[:2], [1, 1])
   634          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   635          log.info('Get cancel proposal information {}'.format(proposalinfo_cancel))
   636          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   637          log.info('Get text proposal information {}'.format(proposalinfo_text))
   638          wait_block_number(pip.node, 50)
   639          report_information = mock_duplicate_sign(2, pip.node.nodekey, pip.node.blsprikey, 45)
   640          log.info("Report information: {}".format(report_information))
   641          address, _ = pip.economic.account.generate_account(pip.node.web3, 10 ** 18 * 1000)
   642          result = clients_consensus[0].duplicatesign.reportDuplicateSign(2, report_information, address)
   643          assert_code(result, 0)
   644          wait_block_number(pip.node, self.get_block(proposalinfo_cancel, proposalinfo_text))
   645          assert pip.get_accuverifiers_count(proposalinfo_text.get('ProposalID')) == [4, 1, 0, 0]
   646          assert pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 0, 0]
   647          assert_code(pip.get_status_of_proposal(proposalinfo_cancel.get('ProposalID')), 3)
   648          assert_code(pip.get_status_of_proposal(proposalinfo_text.get('ProposalID')), 3)
   649  
   650      @pytest.mark.P2
   651      @allure.title('Cancel proposal and text proposal statistics function verification')
   652      def test_VS_EXT_011_VS_EXC_011(self, new_genesis_env, clients_consensus):
   653          self.update_setting(new_genesis_env, 500, 80, 1, 0.249, 1, 0.249)
   654          pip = clients_consensus[0].pip
   655          submittpandvote(clients_consensus[:2], 2, 1)
   656          submitcppandvote(clients_consensus[:2], [2, 1])
   657          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   658          log.info('Get cancel proposal information {}'.format(proposalinfo_cancel))
   659          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   660          log.info('Get text proposal information {}'.format(proposalinfo_text))
   661          wait_block_number(pip.node, 50)
   662          report_information = mock_duplicate_sign(2, pip.node.nodekey, pip.node.blsprikey, 45)
   663          log.info("Report information: {}".format(report_information))
   664          address, _ = pip.economic.account.generate_account(pip.node.web3, 10 ** 18 * 1000)
   665          result = clients_consensus[0].duplicatesign.reportDuplicateSign(2, report_information, address)
   666          assert_code(result, 0)
   667          wait_block_number(pip.node, self.get_block(proposalinfo_cancel, proposalinfo_text))
   668          assert pip.get_accuverifiers_count(proposalinfo_text.get('ProposalID')) == [4, 1, 0, 0]
   669          assert pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 0, 0]
   670          assert_code(pip.get_status_of_proposal(proposalinfo_cancel.get('ProposalID')), 2)
   671          assert_code(pip.get_status_of_proposal(proposalinfo_text.get('ProposalID')), 2)
   672  
   673      @pytest.mark.P2
   674      @allure.title('Cancel proposal and text proposal statistics function verification')
   675      def test_VS_EXT_012_VS_EXC_012(self, new_genesis_env, clients_consensus):
   676          self.update_setting(new_genesis_env, 500, 80, 1, 0.249, 1, 0.249)
   677          pip = clients_consensus[0].pip
   678          submittpandvote(clients_consensus[:2], 3, 1)
   679          submitcppandvote(clients_consensus[:2], [3, 1])
   680          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   681          log.info('Get cancel proposal information {}'.format(proposalinfo_cancel))
   682          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   683          log.info('Get text proposal information {}'.format(proposalinfo_text))
   684          wait_block_number(pip.node, 50)
   685          report_information = mock_duplicate_sign(2, pip.node.nodekey, pip.node.blsprikey, 45)
   686          log.info("Report information: {}".format(report_information))
   687          address, _ = pip.economic.account.generate_account(pip.node.web3, 10 ** 18 * 1000)
   688          result = clients_consensus[0].duplicatesign.reportDuplicateSign(2, report_information, address)
   689          assert_code(result, 0)
   690          wait_block_number(pip.node, self.get_block(proposalinfo_cancel, proposalinfo_text))
   691          assert pip.get_accuverifiers_count(proposalinfo_text.get('ProposalID')) == [4, 1, 0, 0]
   692          assert pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 0, 0]
   693          assert_code(pip.get_status_of_proposal(proposalinfo_cancel.get('ProposalID')), 2)
   694          assert_code(pip.get_status_of_proposal(proposalinfo_text.get('ProposalID')), 2)
   695  
   696      @pytest.mark.P2
   697      @allure.title('Cancel proposal and text proposal statistics function verification')
   698      def test_VS_EXT_013_VS_EXC_013(self, new_genesis_env, clients_consensus):
   699          self.update_setting(new_genesis_env, 500, 120, 1, 0.499, 1, 0.499)
   700          pip = clients_consensus[0].pip
   701          pip_test = clients_consensus[1].pip
   702          submittpandvote(clients_consensus[:2], 1, 1)
   703          submitcppandvote(clients_consensus[:2], [1, 1], voting_rounds=3)
   704          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   705          log.info('Get cancel proposal information {}'.format(proposalinfo_cancel))
   706          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   707          log.info('Get text proposal information {}'.format(proposalinfo_text))
   708          pip.node.stop()
   709          wait_block_number(pip_test.node, self.get_block(proposalinfo_cancel, proposalinfo_text))
   710          assert pip_test.get_accuverifiers_count(proposalinfo_text.get('ProposalID')) == [4, 1, 0, 0]
   711          assert pip_test.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 0, 0]
   712          assert_code(pip_test.get_status_of_proposal(proposalinfo_cancel.get('ProposalID')), 3)
   713          assert_code(pip_test.get_status_of_proposal(proposalinfo_text.get('ProposalID')), 3)
   714  
   715      @pytest.mark.P2
   716      @allure.title('Cancel proposal and text proposal statistics function verification')
   717      def test_VS_EXT_014_VS_EXC_014(self, new_genesis_env, clients_consensus):
   718          self.update_setting(new_genesis_env, 500, 120, 1, 0.499, 1, 0.499)
   719          pip = clients_consensus[0].pip
   720          pip_test = clients_consensus[1].pip
   721          submittpandvote(clients_consensus[:2], 2, 1)
   722          submitcppandvote(clients_consensus[:2], [2, 1], voting_rounds=3)
   723          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   724          log.info('Get cancel proposal information {}'.format(proposalinfo_cancel))
   725          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   726          log.info('Get text proposal information {}'.format(proposalinfo_text))
   727          pip.node.stop()
   728          wait_block_number(pip_test.node, self.get_block(proposalinfo_cancel, proposalinfo_text))
   729          assert pip_test.get_accuverifiers_count(proposalinfo_text.get('ProposalID')) == [4, 1, 0, 0]
   730          assert pip_test.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 0, 0]
   731          assert_code(pip_test.get_status_of_proposal(proposalinfo_cancel.get('ProposalID')), 3)
   732          assert_code(pip_test.get_status_of_proposal(proposalinfo_text.get('ProposalID')), 3)
   733  
   734      @pytest.mark.P2
   735      @allure.title('Cancel proposal and text proposal statistics function verification')
   736      def test_VS_EXT_015_VS_EXC_015(self, new_genesis_env, clients_consensus):
   737          self.update_setting(new_genesis_env, 500, 120, 1, 0.499, 1, 0.499)
   738          pip = clients_consensus[0].pip
   739          pip_test = clients_consensus[1].pip
   740          submittpandvote(clients_consensus[:2], 3, 1)
   741          submitcppandvote(clients_consensus[:2], [3, 1], voting_rounds=3)
   742          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   743          log.info('Get cancel proposal information {}'.format(proposalinfo_cancel))
   744          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   745          log.info('Get text proposal information {}'.format(proposalinfo_text))
   746          pip.node.stop()
   747          wait_block_number(pip_test.node, self.get_block(proposalinfo_cancel, proposalinfo_text))
   748          assert pip_test.get_accuverifiers_count(proposalinfo_text.get('ProposalID')) == [4, 1, 0, 0]
   749          assert pip_test.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 0, 0]
   750          assert_code(pip_test.get_status_of_proposal(proposalinfo_cancel.get('ProposalID')), 3)
   751          assert_code(pip_test.get_status_of_proposal(proposalinfo_text.get('ProposalID')), 3)
   752  
   753      @pytest.mark.P2
   754      @allure.title('Cancel proposal and text proposal statistics function verification')
   755      def test_VS_EXT_016_VS_EXC_016(self, new_genesis_env, clients_consensus):
   756          self.update_setting(new_genesis_env, 500, 80, 1, 0.499, 1, 0.499)
   757          pip = clients_consensus[0].pip
   758          pip_test = clients_consensus[1].pip
   759          submittpandvote(clients_consensus[:2], 1, 1)
   760          submitcppandvote(clients_consensus[:2], [1, 1], voting_rounds=2)
   761          proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
   762          log.info('Get cancel proposal information {}'.format(proposalinfo_cancel))
   763          proposalinfo_text = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
   764          log.info('Get text proposal information {}'.format(proposalinfo_text))
   765          wait_block_number(pip_test.node, self.get_block(proposalinfo_cancel, proposalinfo_text))
   766          pip.node.stop()
   767          assert pip_test.get_accuverifiers_count(proposalinfo_text.get('ProposalID')) == [4, 2, 0, 0]
   768          assert pip_test.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 2, 0, 0]
   769          assert_code(pip_test.get_status_of_proposal(proposalinfo_cancel.get('ProposalID')), 2)
   770          assert_code(pip_test.get_status_of_proposal(proposalinfo_text.get('ProposalID')), 2)
   771  
   772  
   773  class TestVotingStatisticsPP:
   774      def update_setting_param(self, new_genesis_env, *args):
   775          genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
   776          if len(args) == 1:
   777              genesis.economicModel.gov.paramProposalVoteDurationSeconds = args[0]
   778          elif len(args) == 3:
   779              genesis.economicModel.gov.paramProposalVoteDurationSeconds = args[0]
   780              genesis.economicModel.gov.paramProposalSupportRate = args[1]
   781              genesis.economicModel.gov.paramProposalVoteRate = args[2]
   782          else:
   783              raise ValueError('args error')
   784          new_genesis_env.set_genesis(genesis.to_dict())
   785          new_genesis_env.deploy_all()
   786  
   787      def assert_proposal_result(self, pip, proposalinfo, tally_result):
   788          assert pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == tally_result[0]
   789          assert pip.get_nays_of_proposal(proposalinfo.get('ProposalID')) == tally_result[1]
   790          assert pip.get_abstentions_of_proposal(proposalinfo.get('ProposalID')) == tally_result[2]
   791          assert pip.get_status_of_proposal(proposalinfo.get('ProposalID')) == tally_result[3]
   792  
   793      def assert_accuverifiers_count(self, pip, proposalinfo, accuverifiers_result):
   794          result = pip.get_accuverifiers_count(proposalinfo.get('ProposalID'))
   795          log.info('Get proposal vote infomation {}'.format(result))
   796          assert result == accuverifiers_result
   797  
   798      @pytest.mark.P1
   799      @allure.title('Parammeter proposal statistics function verification')
   800      def test_VS_EP_004(self, new_genesis_env, clients_consensus, clients_noconsensus):
   801          self.update_setting_param(new_genesis_env, 0)
   802          submitppandvote(clients_consensus[0:-1], 1, 2, 3)
   803          proposalinfo = clients_consensus[0].pip.get_effect_proposal_info_of_vote(clients_consensus[0].pip.cfg.param_proposal)
   804          log.info('Param proposal information {}'.format(proposalinfo))
   805          createstaking(clients_noconsensus[:3])
   806          self.assert_accuverifiers_count(clients_consensus[0].pip, proposalinfo, [4, 1, 1, 1])
   807  
   808      @pytest.mark.P1
   809      @allure.title('Parammeter proposal statistics function verification')
   810      def test_VS_EP_005(self, new_genesis_env, clients_consensus, clients_noconsensus):
   811          self.update_setting_param(new_genesis_env, 160)
   812          pip = clients_consensus[0].pip
   813          submitppandvote(clients_consensus[:2], 1, 2)
   814          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
   815          log.info('Param proposal info {}'.format(proposalinfo))
   816          log.info('{}'.format(clients_consensus[:2]))
   817          createstaking(clients_noconsensus[:2])
   818          pip.economic.wait_settlement_blocknum(pip.node)
   819          self.assert_accuverifiers_count(pip, proposalinfo, [6, 1, 1, 0])
   820  
   821          result = proposal_vote(clients_noconsensus[0].pip, vote_option=pip.cfg.vote_option_Abstentions)
   822          assert_code(result, 0)
   823          log.info('{}'.format(clients_consensus[2]))
   824          createstaking(clients_noconsensus[2])
   825          wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
   826  
   827          self.assert_accuverifiers_count(pip, proposalinfo, [6, 1, 1, 1])
   828  
   829      @pytest.mark.P2
   830      @allure.title('Parammeter proposal statistics function verification')
   831      def test_VS_EP_006(self, new_genesis_env, clients_consensus, clients_noconsensus):
   832          self.update_setting_param(new_genesis_env, 320)
   833          submitppandvote(clients_consensus[:1], 1)
   834          proposalinfo = clients_consensus[0].pip.get_effect_proposal_info_of_vote(clients_consensus[0].pip.cfg.param_proposal)
   835          log.info('Param proposal info {}'.format(proposalinfo))
   836          createstaking(clients_noconsensus[0])
   837          clients_consensus[0].pip.economic.wait_settlement_blocknum(clients_consensus[0].pip.node)
   838          self.assert_accuverifiers_count(clients_consensus[0].pip, proposalinfo, [5, 1, 0, 0])
   839  
   840          result = proposal_vote(clients_consensus[1].pip, vote_option=clients_consensus[0].pip.cfg.vote_option_nays)
   841          assert_code(result, 0)
   842          createstaking(clients_noconsensus[1])
   843          clients_consensus[0].pip.economic.wait_settlement_blocknum(clients_consensus[0].pip.node)
   844          self.assert_accuverifiers_count(clients_consensus[0].pip, proposalinfo, [6, 1, 1, 0])
   845  
   846          result = proposal_vote(clients_consensus[2].pip, vote_option=clients_consensus[0].pip.cfg.vote_option_Abstentions)
   847          assert_code(result, 0)
   848          createstaking(clients_noconsensus[2])
   849          wait_block_number(clients_consensus[0].pip.node, proposalinfo.get('EndVotingBlock'))
   850  
   851          self.assert_accuverifiers_count(clients_consensus[0].pip, proposalinfo, [6, 1, 1, 1])
   852  
   853      @pytest.mark.P0
   854      @allure.title('Parammeter proposal statistics function verification')
   855      def test_VS_EP_007_VS_EP_003(self, new_genesis_env, clients_consensus):
   856          self.update_setting_param(new_genesis_env, 0, 1, 0.49)
   857          submitppandvote(clients_consensus[:2], 1, 1)
   858          proposalinfo = clients_consensus[0].pip.get_effect_proposal_info_of_vote(clients_consensus[0].pip.cfg.param_proposal)
   859          log.info('Get param proposal information {}'.format(proposalinfo))
   860          result = clients_consensus[0].staking.withdrew_staking(clients_consensus[0].node.staking_address)
   861          log.info('Node {} withdrew staking result {}'.format(clients_consensus[0].node.node_id, result))
   862          assert_code(result, 0)
   863          result = clients_consensus[0].pip.pip.getTallyResult(proposalinfo.get('ProposalID'))
   864          log.info('Before endvoting block, get Tally resul of the parameter proposal result : {}'.format(result))
   865          assert_code(result, 302030)
   866          wait_block_number(clients_consensus[0].node, proposalinfo.get('EndVotingBlock'))
   867          self.assert_proposal_result(clients_consensus[0].pip, proposalinfo, [2, 0, 0, 2])
   868  
   869      @pytest.mark.P2
   870      @allure.title('Parammeter proposal statistics function verification')
   871      def test_VS_EP_008(self, new_genesis_env, clients_consensus):
   872          self.update_setting_param(new_genesis_env, 0, 0.5, 0.5)
   873          submitppandvote(clients_consensus[:2], 1, 1)
   874          pip = clients_consensus[0].pip
   875          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
   876          log.info('Get param proposal information {}'.format(proposalinfo))
   877          wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
   878          report_information = mock_duplicate_sign(1, pip.node.nodekey, pip.node.blsprikey,
   879                                                   proposalinfo.get('EndVotingBlock') - 10)
   880          log.info("Report information: {}".format(report_information))
   881          address, _ = pip.economic.account.generate_account(pip.node.web3, 10**18 * 1000)
   882          result = clients_consensus[0].duplicatesign.reportDuplicateSign(1, report_information, address)
   883          assert_code(result, 0)
   884          assert clients_consensus[1].pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == 2
   885  
   886      @pytest.mark.P2
   887      @allure.title('Parammeter proposal statistics function verification')
   888      def test_VS_EP_009(self, new_genesis_env, clients_consensus):
   889          self.update_setting_param(new_genesis_env, 0, 0.5, 0.5)
   890          submitppandvote(clients_consensus[:2], 1, 1)
   891          pip = clients_consensus[0].pip
   892          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
   893          log.info('Get param proposal information {}'.format(proposalinfo))
   894          wait_block_number(pip.node, 80)
   895          report_information = mock_duplicate_sign(1, pip.node.nodekey, pip.node.blsprikey, 70)
   896          log.info("Report information: {}".format(report_information))
   897          address, _ = pip.economic.account.generate_account(pip.node.web3, 10**18 * 1000)
   898          result = clients_consensus[0].duplicatesign.reportDuplicateSign(1, report_information, address)
   899          assert_code(result, 0)
   900          wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
   901          assert clients_consensus[1].pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == 1
   902  
   903      @pytest.mark.P2
   904      @allure.title('Parammeter proposal statistics function verification')
   905      def test_VS_EP_010(self, new_genesis_env, clients_consensus):
   906          self.update_setting_param(new_genesis_env, 0, 0.5, 0.5)
   907          submitppandvote(clients_consensus[:2], 2, 2)
   908          pip = clients_consensus[0].pip
   909          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
   910          log.info('Get param proposal information {}'.format(proposalinfo))
   911          wait_block_number(pip.node, 80)
   912          report_information = mock_duplicate_sign(1, pip.node.nodekey, pip.node.blsprikey, 70)
   913          log.info("Report information: {}".format(report_information))
   914          address, _ = pip.economic.account.generate_account(pip.node.web3, 10**18 * 1000)
   915          result = clients_consensus[0].duplicatesign.reportDuplicateSign(1, report_information, address)
   916          assert_code(result, 0)
   917          wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
   918          assert clients_consensus[1].pip.get_nays_of_proposal(proposalinfo.get('ProposalID')) == 1
   919  
   920      @pytest.mark.P2
   921      @allure.title('Parammeter proposal statistics function verification')
   922      def test_VS_EP_011(self, new_genesis_env, clients_consensus):
   923          self.update_setting_param(new_genesis_env, 0, 0.5, 0.5)
   924          submitppandvote(clients_consensus[:2], 3, 3)
   925          pip = clients_consensus[0].pip
   926          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
   927          log.info('Get param proposal information {}'.format(proposalinfo))
   928          wait_block_number(pip.node, 80)
   929          report_information = mock_duplicate_sign(1, pip.node.nodekey, pip.node.blsprikey, 70)
   930          log.info("Report information: {}".format(report_information))
   931          address, _ = pip.economic.account.generate_account(pip.node.web3, 10**18 * 1000)
   932          result = clients_consensus[0].duplicatesign.reportDuplicateSign(1, report_information, address)
   933          assert_code(result, 0)
   934          wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
   935          assert clients_consensus[1].pip.get_abstentions_of_proposal(proposalinfo.get('ProposalID')) == 1
   936  
   937      @pytest.mark.P2
   938      @allure.title('Parammeter proposal statistics function verification')
   939      def test_VS_EP_012(self, new_genesis_env, clients_consensus):
   940          self.update_setting_param(new_genesis_env, 0, 0.5, 0.5)
   941          submitppandvote(clients_consensus[:2], 1, 1)
   942          pip = clients_consensus[0].pip
   943          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
   944          log.info('Get param proposal information {}'.format(proposalinfo))
   945          wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
   946          report_information = mock_duplicate_sign(2, pip.node.nodekey, pip.node.blsprikey,
   947                                                   proposalinfo.get('EndVotingBlock') - 10)
   948          log.info("Report information: {}".format(report_information))
   949          address, _ = pip.economic.account.generate_account(pip.node.web3, 10**18 * 1000)
   950          result = clients_consensus[0].duplicatesign.reportDuplicateSign(2, report_information, address)
   951          assert_code(result, 0)
   952          assert clients_consensus[1].pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == 2
   953  
   954      @pytest.mark.P2
   955      @allure.title('Parammeter proposal statistics function verification')
   956      def test_VS_EP_013(self, new_genesis_env, clients_consensus):
   957          self.update_setting_param(new_genesis_env, 0, 0.5, 0.5)
   958          submitppandvote(clients_consensus[:2], 1, 1)
   959          pip = clients_consensus[0].pip
   960          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
   961          log.info('Get param proposal information {}'.format(proposalinfo))
   962          wait_block_number(pip.node, 80)
   963          report_information = mock_duplicate_sign(2, pip.node.nodekey, pip.node.blsprikey, 70)
   964          log.info("Report information: {}".format(report_information))
   965          address, _ = pip.economic.account.generate_account(pip.node.web3, 10**18 * 1000)
   966          result = clients_consensus[0].duplicatesign.reportDuplicateSign(2, report_information, address)
   967          assert_code(result, 0)
   968          wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
   969          assert clients_consensus[1].pip.get_yeas_of_proposal(proposalinfo.get('ProposalID')) == 1
   970  
   971      @pytest.mark.P2
   972      @allure.title('Parammeter proposal statistics function verification')
   973      def test_VS_EP_014(self, new_genesis_env, clients_consensus):
   974          self.update_setting_param(new_genesis_env, 0, 0.5, 0.5)
   975          submitppandvote(clients_consensus[:2], 2, 2)
   976          pip = clients_consensus[0].pip
   977          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
   978          log.info('Get param proposal information {}'.format(proposalinfo))
   979          wait_block_number(pip.node, 80)
   980          report_information = mock_duplicate_sign(2, pip.node.nodekey, pip.node.blsprikey, 70)
   981          log.info("Report information: {}".format(report_information))
   982          address, _ = pip.economic.account.generate_account(pip.node.web3, 10**18 * 1000)
   983          result = clients_consensus[0].duplicatesign.reportDuplicateSign(2, report_information, address)
   984          assert_code(result, 0)
   985          wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
   986          assert clients_consensus[1].pip.get_nays_of_proposal(proposalinfo.get('ProposalID')) == 1
   987  
   988      @pytest.mark.P2
   989      @allure.title('Parammeter proposal statistics function verification')
   990      def test_VS_EP_015(self, new_genesis_env, clients_consensus):
   991          self.update_setting_param(new_genesis_env, 0, 0.5, 0.5)
   992          submitppandvote(clients_consensus[:2], 3, 3)
   993          pip = clients_consensus[0].pip
   994          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
   995          log.info('Get param proposal information {}'.format(proposalinfo))
   996          wait_block_number(pip.node, 80)
   997          report_information = mock_duplicate_sign(2, pip.node.nodekey, pip.node.blsprikey, 70)
   998          log.info("Report information: {}".format(report_information))
   999          address, _ = pip.economic.account.generate_account(pip.node.web3, 10**18 * 1000)
  1000          result = clients_consensus[0].duplicatesign.reportDuplicateSign(2, report_information, address)
  1001          assert_code(result, 0)
  1002          wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
  1003          assert clients_consensus[1].pip.get_abstentions_of_proposal(proposalinfo.get('ProposalID')) == 1
  1004  
  1005      @pytest.mark.P2
  1006      @allure.title('Parammeter proposal statistics function verification')
  1007      def test_VS_EP_016(self, new_genesis_env, clients_consensus):
  1008          self.update_setting_param(new_genesis_env, 0, 1, 0.249)
  1009          submitppandvote(clients_consensus[:2], 1, 1)
  1010          pip = clients_consensus[0].pip
  1011          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
  1012          log.info('Get param proposal information {}'.format(proposalinfo))
  1013          assert pip.get_accuverifiers_count(proposalinfo.get('ProposalID')) == [4, 2, 0, 0]
  1014          log.info('Stop the node {}'.format(pip.node.node_id))
  1015          pip.node.stop()
  1016          wait_block_number(clients_consensus[1].node, proposalinfo.get('EndVotingBlock'))
  1017          self.assert_proposal_result(clients_consensus[1].pip, proposalinfo, [1, 0, 0, 2])
  1018  
  1019      @pytest.mark.P2
  1020      @allure.title('Parammeter proposal statistics function verification')
  1021      def test_VS_EP_017(self, new_genesis_env, clients_consensus):
  1022          self.update_setting_param(new_genesis_env, 0, 1, 0.249)
  1023          submitppandvote(clients_consensus[:2], 2, 1)
  1024          pip = clients_consensus[0].pip
  1025          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
  1026          log.info('Get param proposal information {}'.format(proposalinfo))
  1027          assert pip.get_accuverifiers_count(proposalinfo.get('ProposalID')) == [4, 1, 1, 0]
  1028          log.info('Stop the node {}'.format(pip.node.node_id))
  1029          pip.node.stop()
  1030          wait_block_number(clients_consensus[1].node, proposalinfo.get('EndVotingBlock'))
  1031          self.assert_proposal_result(clients_consensus[1].pip, proposalinfo, [1, 0, 0, 2])
  1032  
  1033      @pytest.mark.P2
  1034      @allure.title('Parammeter proposal statistics function verification')
  1035      def test_VS_EP_018(self, new_genesis_env, clients_consensus):
  1036          self.update_setting_param(new_genesis_env, 0, 1, 0.249)
  1037          submitppandvote(clients_consensus[:2], 3, 1)
  1038          pip = clients_consensus[0].pip
  1039          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
  1040          log.info('Get param proposal information {}'.format(proposalinfo))
  1041          assert pip.get_accuverifiers_count(proposalinfo.get('ProposalID')) == [4, 1, 0, 1]
  1042          log.info('Stop the node {}'.format(pip.node.node_id))
  1043          pip.node.stop()
  1044          wait_block_number(clients_consensus[1].node, proposalinfo.get('EndVotingBlock'))
  1045          self.assert_proposal_result(clients_consensus[1].pip, proposalinfo, [1, 0, 0, 2])
  1046  
  1047      @pytest.mark.P2
  1048      @allure.title('Parammeter proposal statistics function verification')
  1049      def test_VS_EP_019(self, new_genesis_env, clients_consensus):
  1050          self.update_setting_param(new_genesis_env, 0, 0.99, 0.25)
  1051          submitppandvote(clients_consensus[:3], 1, 2, 3)
  1052          pip = clients_consensus[0].pip
  1053          proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
  1054          log.info('Get param proposal information {}'.format(proposalinfo))
  1055          assert pip.get_accuverifiers_count(proposalinfo.get('ProposalID')) == [4, 1, 1, 1]
  1056          wait_block_number(clients_consensus[1].node, proposalinfo.get('EndVotingBlock'))
  1057          self.assert_proposal_result(clients_consensus[1].pip, proposalinfo, [1, 1, 1, 3])
  1058          log.info('Stop the node {}'.format(pip.node.node_id))
  1059          pip.node.stop()
  1060          wait_block_number(clients_consensus[1].node, proposalinfo.get('EndVotingBlock')
  1061                            + clients_consensus[1].economic.consensus_size)
  1062          self.assert_proposal_result(clients_consensus[1].pip, proposalinfo, [1, 1, 1, 3])