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