Example #1
0
 def test_V_STA_2_to_5(self, no_vp_proposal, client_verifier_obj_list):
     pip_obj = no_vp_proposal
     result = pip_obj.submitVersion(pip_obj.node.node_id, str(time.time()), pip_obj.cfg.version5, 2,
                                    pip_obj.node.staking_address, transaction_cfg=pip_obj.cfg.transaction_cfg)
     log.info('Submit Version proposal result : {}'.format(result))
     assert_code(result, 0)
     proposalinfo = pip_obj.get_effect_proposal_info_of_vote(pip_obj.cfg.version_proposal)
     log.info('Get version proposal information : {}'.format(proposalinfo))
     for client_obj in client_verifier_obj_list[:2]:
         result = version_proposal_vote(client_obj.pip)
         log.info('Node {} vote proposal result : {}'.format(client_obj.node.node_id, result))
         assert_code(result, 0)
     upload_platon(client_verifier_obj_list[-2].node, pip_obj.cfg.PLATON_NEW_BIN)
     client_verifier_obj_list[-2].node.restart()
     log.info('Replace the platon of the Node {}, restart the node'.format(client_verifier_obj_list[-2].node.node_id))
     wait_block_number(pip_obj.node, proposalinfo.get('EndVotingBlock') - 10)
     result = client_verifier_obj_list[-2].pip.vote(client_verifier_obj_list[-2].pip.node.node_id, proposalinfo.get('ProposalID'),
                                                    client_verifier_obj_list[-2].pip.cfg.vote_option_yeas,
                                                    client_verifier_obj_list[-2].pip.node.staking_address, transaction_cfg=pip_obj.cfg.transaction_cfg)
     log.info('Node {} vote proposal result : {}'.format(client_verifier_obj_list[-1].node.node_id, result))
     assert_code(result, 0)
     wait_block_number(pip_obj.node, proposalinfo.get('EndVotingBlock'))
     pip_obj = client_verifier_obj_list[-1].pip
     result = pip_obj.vote(pip_obj.node.node_id, proposalinfo.get('ProposalID'), pip_obj.cfg.vote_option_yeas,
                           pip_obj.node.staking_address, transaction_cfg=pip_obj.cfg.transaction_cfg)
     log.info('Node {} vote proposal result : {}'.format(client_verifier_obj_list[-1].node.node_id, result))
     assert_code(pip_obj.get_status_of_proposal(proposalinfo.get('ProposalID')), 4)
     wait_block_number(pip_obj.node, proposalinfo.get('ActiveBlock'))
     assert_code(pip_obj.get_status_of_proposal(proposalinfo.get('ProposalID')), 5)
     result = pip_obj.vote(pip_obj.node.node_id, proposalinfo.get('ProposalID'), pip_obj.cfg.vote_option_yeas,
                           pip_obj.node.staking_address, transaction_cfg=pip_obj.cfg.transaction_cfg)
     log.info('Node {} vote proposal result : {}'.format(client_verifier_obj_list[-1].node.node_id, result))
Example #2
0
    def test_VO_TER_001_003_005(self, candidate_has_proposal, client_verifier):
        pip = candidate_has_proposal
        pip_test = client_verifier.pip
        proposalinfo_version = pip_test.get_effect_proposal_info_of_vote()
        log.info('Get proposal information :{}'.format(proposalinfo_version))
        result = pip_test.submitCancel(
            pip_test.node.node_id,
            str(time.time()),
            1,
            proposalinfo_version.get('ProposalID'),
            pip_test.node.staking_address,
            transaction_cfg=pip_test.cfg.transaction_cfg)
        log.info('Submit cancel proposal result : {}'.format(result))
        assert_code(result, 0)
        result = pip_test.submitText(
            pip_test.node.node_id,
            str(time.time()),
            pip_test.node.staking_address,
            transaction_cfg=pip_test.cfg.transaction_cfg)
        log.info('Submit text proposal result : {}'.format(result))
        assert_code(result, 0)
        result = version_proposal_vote(pip)
        log.info('Candidate node {} vote version proposal result : {}'.format(
            pip.node.node_id, result))
        assert_code(result, 302022)

        result = proposal_vote(pip, proposaltype=pip.cfg.cancel_proposal)
        log.info('Candidate node {} vote cancel proposal result : {}'.format(
            pip.node.node_id, result))
        assert_code(result, 302022)

        result = proposal_vote(pip, proposaltype=pip.cfg.text_proposal)
        log.info('Candidate node {} vote text proposal result : {}'.format(
            pip.node.node_id, result))
        assert_code(result, 302022)
Example #3
0
    def test_VO_VE_001_002_VO_CA_001_002_VO_TER_002_VO_TER_004(self, new_genesis_env, client_con_list_obj, client_noconsensus_obj):
        pip_obj = client_con_list_obj[0].pip
        genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
        genesis.economicModel.gov.versionProposalVoteDurationSeconds = 3200
        genesis.economicModel.staking.unStakeFreezeDuration = 2
        new_genesis_env.set_genesis(genesis.to_dict())
        new_genesis_env.deploy_all()
        result = pip_obj.submitVersion(pip_obj.node.node_id, str(time.time()), pip_obj.cfg.version5, 20,
                                       pip_obj.node.staking_address, transaction_cfg=pip_obj.cfg.transaction_cfg)
        log.info('Submit version proposal information : {}'.format(result))
        assert_code(result, 0)
        proposalinfo_version = pip_obj.get_effect_proposal_info_of_vote(pip_obj.cfg.version_proposal)
        log.info('Get param proposal information : {}'.format(proposalinfo_version))

        result = pip_obj.submitCancel(pip_obj.node.node_id, str(time.time()), 10, proposalinfo_version.get('ProposalID'),
                                      pip_obj.node.staking_address, transaction_cfg=pip_obj.cfg.transaction_cfg)
        log.info('Submit cancel proposal information : {}'.format(result))
        assert_code(result, 0)
        proposalinfo_cancel = pip_obj.get_effect_proposal_info_of_vote(pip_obj.cfg.cancel_proposal)
        log.info('Get cancel proposal information : {}'.format(proposalinfo_cancel))

        result = client_con_list_obj[0].staking.withdrew_staking(client_con_list_obj[0].node.staking_address)
        log.info('Node {} withdrew staking result {}'.format(client_con_list_obj[0].node.node_id, result))
        assert_code(result, 0)
        address = client_con_list_obj[0].node.staking_address

        result = version_proposal_vote(pip_obj)
        log.info('node vote version proposal result {}'.format(result))
        assert_code(result, 302020)

        result = cancel_proposal_vote(pip_obj)
        log.info('node vote cancel proposal result {}'.format(result))
        assert_code(result, 302020)

        address_test, _ = pip_obj.economic.account.generate_account(pip_obj.node.web3, 10**18 * 100000)
        result = client_noconsensus_obj.pip.vote(client_noconsensus_obj.node.node_id, proposalinfo_version.get('ProposalID'),
                                                 pip_obj.cfg.vote_option_yeas, address_test,
                                                 transaction_cfg=pip_obj.cfg.transaction_cfg)
        log.info('node {} vote param proposal result {}'.format(client_noconsensus_obj.node.node_id, result))
        assert_code(result, 302022)

        result = client_noconsensus_obj.pip.vote(client_noconsensus_obj.node.node_id, proposalinfo_cancel.get('ProposalID'),
                                                 pip_obj.cfg.vote_option_yeas, address_test,
                                                 transaction_cfg=pip_obj.cfg.transaction_cfg)
        log.info('node {} vote cancel proposal result {}'.format(client_noconsensus_obj.node.node_id, result))
        assert_code(result, 302022)

        pip_obj.economic.wait_settlement_blocknum(pip_obj.node, pip_obj.economic.unstaking_freeze_ratio)
        result = pip_obj.vote(pip_obj.node.node_id, proposalinfo_version.get('ProposalID'), pip_obj.cfg.vote_option_yeas,
                              address, transaction_cfg=pip_obj.cfg.transaction_cfg)
        log.info('Exited node vote version proposal result {}'.format(result))
        assert_code(result, 302022)

        result = pip_obj.vote(pip_obj.node.node_id, proposalinfo_cancel.get('ProposalID'), pip_obj.cfg.vote_option_nays,
                              address, transaction_cfg=pip_obj.cfg.transaction_cfg)
        log.info('Exited node vote cancel proposal result {}'.format(result))
        assert_code(result, 302022)
Example #4
0
def test_VO_VO_001_V0_RE_001_V0_WA_001_V_STA_1_VO_OP_001_VO_OP_002(no_vp_proposal):
    pip_obj = no_vp_proposal
    result = pip_obj.submitVersion(pip_obj.node.node_id, str(time.time()), pip_obj.cfg.version8, 2,
                                   pip_obj.node.staking_address, transaction_cfg=pip_obj.cfg.transaction_cfg)
    log.info('Submit version proposal result : {}'.format(result))
    assert_code(result, 0)
    proposalinfo = pip_obj.get_effect_proposal_info_of_vote()
    log.info('Get version proposalinfo {}'.format(proposalinfo))

    upload_platon(pip_obj.node, pip_obj.cfg.PLATON_NEW_BIN)
    log.info('Replace the node platon package to {}'.format(pip_obj.cfg.version5))
    pip_obj.node.restart()
    log.info('Restart the node {}'.format(pip_obj.node.node_id))
    address, _ = pip_obj.economic.account.generate_account(pip_obj.node.web3, 10**18 * 10000)
    result = pip_obj.vote(pip_obj.node.node_id, proposalinfo.get('ProposalID'), pip_obj.cfg.vote_option_yeas,
                          address, transaction_cfg=pip_obj.cfg.transaction_cfg)
    log.info('Not staking address vote result : {}'.format(result))
    assert_code(result, 302021)

    result = pip_obj.vote(pip_obj.node.node_id, proposalinfo.get('ProposalID'), pip_obj.cfg.vote_option_nays,
                          pip_obj.node.staking_address, transaction_cfg=pip_obj.cfg.transaction_cfg)
    log.info('vote option {} result {}'.format(pip_obj.cfg.vote_option_nays, result))
    assert_code(result, 302002)

    result = pip_obj.vote(pip_obj.node.node_id, proposalinfo.get('ProposalID'), pip_obj.cfg.vote_option_Abstentions,
                          pip_obj.node.staking_address, transaction_cfg=pip_obj.cfg.transaction_cfg)
    log.info('vote option {} result {}'.format(pip_obj.cfg.vote_option_Abstentions, result))
    assert_code(result, 302002)

    result = pip_obj.vote(pip_obj.node.node_id, proposalinfo.get('ProposalID'), 0,
                          pip_obj.node.staking_address, transaction_cfg=pip_obj.cfg.transaction_cfg)
    log.info('vote option {} result {}'.format(0, result))
    assert_code(result, 302002)

    result = pip_obj.vote(pip_obj.node.node_id, proposalinfo.get('ProposalID'), 'a',
                          pip_obj.node.staking_address, transaction_cfg=pip_obj.cfg.transaction_cfg)
    log.info('vote option {} result {}'.format(pip_obj.cfg.vote_option_nays, result))
    assert_code(result, 302002)

    address, _ = pip_obj.economic.account.generate_account(pip_obj.node.web3, 10**18 * 10000)
    result = pip_obj.vote(pip_obj.node.node_id, proposalinfo.get('ProposalID'), pip_obj.cfg.vote_option_yeas,
                          address, transaction_cfg=pip_obj.cfg.transaction_cfg)
    assert_code(result, 302021)

    result = version_proposal_vote(pip_obj)
    assert_code(result, 0)

    result = pip_obj.vote(pip_obj.node.node_id, proposalinfo.get('ProposalID'), pip_obj.cfg.vote_option_yeas,
                          pip_obj.node.staking_address, transaction_cfg=pip_obj.cfg.transaction_cfg)
    log.info('vote duplicated result: {}'.format(result))
    assert_code(result, 302027)

    wait_block_number(pip_obj.node, proposalinfo.get('EndVotingBlock'))
    result = pip_obj.vote(pip_obj.node.node_id, proposalinfo.get('ProposalID'), pip_obj.cfg.vote_option_yeas,
                          pip_obj.node.staking_address, transaction_cfg=pip_obj.cfg.transaction_cfg)
    log.info('endblock vote result: {}'.format(result))
    assert_code(result, 302026)
Example #5
0
    def test_V_STA_2_to_5(self, no_vp_proposal, clients_verifier):
        pip = no_vp_proposal
        value = len(clients_verifier) - 2
        submitvpandvote(clients_verifier[:value], votingrounds=4)
        proposalinfo = pip.get_effect_proposal_info_of_vote()
        log.info('Get version proposal information : {}'.format(proposalinfo))
        result = version_proposal_vote(clients_verifier[-2].pip)
        log.info('Node {} vote proposal result : {}'.format(
            clients_verifier[-1].node.node_id, result))
        assert_code(result, 0)
        wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
        log.info('{}'.format(
            pip.pip.getTallyResult(proposalinfo.get('ProposalID'))))
        assert_code(pip.get_status_of_proposal(proposalinfo.get('ProposalID')),
                    4)

        pip = clients_verifier[-1].pip
        upload_platon(pip.node, pip.cfg.PLATON_NEW_BIN)
        pip.node.restart()
        log.info('Replace the platon bin and restart the node {}'.format(
            pip.node.node_id))
        result = pip.vote(pip.node.node_id,
                          proposalinfo.get('ProposalID'),
                          pip.cfg.vote_option_yeas,
                          pip.node.staking_address,
                          transaction_cfg=pip.cfg.transaction_cfg)
        log.info('Node {} vote proposal result : {}'.format(
            clients_verifier[-1].node.node_id, result))
        assert_code(result, 302026)
        log.info('{}'.format(
            pip.pip.getTallyResult(proposalinfo.get('ProposalID'))))

        if pip.node.eth.blockNumber < pip.get_status_of_proposal(
                proposalinfo.get('ProposalID')):
            assert_code(
                pip.get_status_of_proposal(proposalinfo.get('ProposalID')), 4)
        assert pip.get_status_of_proposal(
            proposalinfo.get('ProposalID')) == 4 or 5

        result = pip.vote(pip.node.node_id,
                          proposalinfo.get('ProposalID'),
                          pip.cfg.vote_option_yeas,
                          pip.node.staking_address,
                          transaction_cfg=pip.cfg.transaction_cfg)
        log.info('Node {} vote proposal result : {}'.format(
            clients_verifier[-1].node.node_id, result))
        assert_code(result, 302026)
        wait_block_number(pip.node, proposalinfo.get('ActiveBlock'))
        assert_code(pip.get_status_of_proposal(proposalinfo.get('ProposalID')),
                    5)
Example #6
0
 def test_VO_TER_003_VO_TER_007_VO_TER_005_PP_VO_013(self, no_vp_proposal, client_candidate_obj, client_verifier_obj):
     ca_pip_obj = client_candidate_obj.pip
     ve_pip_obj = client_verifier_obj.pip
     submittpandvote([client_verifier_obj], 2)
     submitvpandvote([client_verifier_obj], votingrounds=1)
     proposalinfo_version = ve_pip_obj.get_effect_proposal_info_of_vote()
     log.info('Version proposal information {}'.format(proposalinfo_version))
     result = version_proposal_vote(ca_pip_obj)
     assert_code(result, 302022)
     result = proposal_vote(ca_pip_obj, proposaltype=ca_pip_obj.cfg.text_proposal)
     assert_code(result, 302022)
     wait_block_number(ca_pip_obj.node, proposalinfo_version.get('EndVotingBlock'))
     submitcppandvote([client_verifier_obj], [2])
     result = proposal_vote(ca_pip_obj, proposaltype=ca_pip_obj.cfg.param_proposal)
     assert_code(result, 302022)
     result = proposal_vote(ca_pip_obj, proposaltype=ca_pip_obj.cfg.cancel_proposal)
     assert_code(result, 302022)
Example #7
0
    def test_VO_TER_001_003_005(self, proposal_voted_ca_pipobj_list, client_verifier_obj_list):
        pip_obj = proposal_voted_ca_pipobj_list[0]
        proposalinfo_version = client_verifier_obj_list[0].pip.get_effect_proposal_info_of_vote()
        log.info('Get proposal information :{}'.format(proposalinfo_version))
        pip_obj_test = client_verifier_obj_list[0].pip
        result = pip_obj_test.submitCancel(pip_obj_test.node.node_id, str(time.time()), 1, proposalinfo_version.get('ProposalID'),
                                           pip_obj_test.node.staking_address, transaction_cfg=pip_obj_test.cfg.transaction_cfg)
        log.info('Submit cancel proposal result : {}'.format(result))
        assert_code(result, 0)
        result = pip_obj_test.submitText(pip_obj_test.node.node_id, str(time.time()), pip_obj_test.node.staking_address,
                                         transaction_cfg=pip_obj_test.cfg.transaction_cfg)
        log.info('Submit text proposal result : {}'.format(result))
        assert_code(result, 0)
        result = version_proposal_vote(pip_obj)
        log.info('Candidate node {} vote version proposal result : {}'.format(pip_obj.node.node_id, result))
        assert_code(result, 302022)

        result = cancel_proposal_vote(pip_obj)
        log.info('Candidate node {} vote cancel proposal result : {}'.format(pip_obj.node.node_id, result))
        assert_code(result, 302022)

        result = text_proposal_vote(pip_obj)
        log.info('Candidate node {} vote text proposal result : {}'.format(pip_obj.node.node_id, result))
        assert_code(result, 302022)
Example #8
0
    def test_AC_IN_001_002_004_to_006_012_to_014(self, no_vp_proposal,
                                                 client_verifier_obj_list):
        pip_obj = client_verifier_obj_list[-1].pip
        result = pip_obj.submitVersion(
            pip_obj.node.node_id,
            str(time.time()),
            pip_obj.cfg.version5,
            5,
            pip_obj.node.staking_address,
            transaction_cfg=pip_obj.cfg.transaction_cfg)
        log.info('Submit version proposal result : {}'.format(result))
        assert_code(result, 0)
        proposalinfo_version = pip_obj.get_effect_proposal_info_of_vote()
        log.info('Get version proposal information : {}'.format(
            proposalinfo_version))

        result = pip_obj.submitCancel(
            pip_obj.node.node_id,
            str(time.time()),
            4,
            proposalinfo_version.get('ProposalID'),
            pip_obj.node.staking_address,
            transaction_cfg=pip_obj.cfg.transaction_cfg)
        log.info('Submit cancel proposal result : {}'.format(result))
        assert_code(result, 0)
        proposalinfo_cancel = pip_obj.get_effect_proposal_info_of_vote(
            pip_obj.cfg.cancel_proposal)
        log.info('Get cancel proposal information : {}'.format(
            proposalinfo_version))

        for index in range(3):
            client_obj = client_verifier_obj_list[index]
            result = version_proposal_vote(client_obj.pip)
            assert_code(result, 0)
            result = client_obj.pip.vote(
                client_obj.node.node_id,
                proposalinfo_cancel.get('ProposalID'),
                index + 1,
                client_obj.node.staking_address,
                transaction_cfg=pip_obj.cfg.transaction_cfg)
            log.info('Node {} vote cancel proposal result : {}'.format(
                client_obj.node.node_id, result))
            assert_code(result, 0)

        assert pip_obj.get_accuverifiers_count(
            proposalinfo_version.get('ProposalID')) == [4, 3, 0, 0]
        assert pip_obj.get_accuverifiers_count(
            proposalinfo_cancel.get('ProposalID')) == [4, 1, 1, 1]
        log.info('Stop the node {}'.format(
            client_verifier_obj_list[0].node.node_id))
        client_verifier_obj_list[0].node.stop()
        pip_obj.economic.wait_consensus_blocknum(pip_obj.node, 2)
        assert pip_obj.get_accuverifiers_count(
            proposalinfo_version.get('ProposalID')) == [4, 2, 0, 0]
        assert pip_obj.get_accuverifiers_count(
            proposalinfo_cancel.get('ProposalID')) == [4, 0, 1, 1]

        report_information = mock_duplicate_sign(
            1, client_verifier_obj_list[1].node.nodekey,
            client_verifier_obj_list[1].node.blsprikey, 41)
        log.info("Report information: {}".format(report_information))
        address, _ = pip_obj.economic.account.generate_account(
            pip_obj.node.web3, 10**18 * 1000)
        result = client_verifier_obj_list[
            -1].duplicatesign.reportDuplicateSign(1, report_information,
                                                  address)
        log.info('Node duplicate block result : {}'.format(result))
        assert_code(result, 0)
        assert pip_obj.get_accuverifiers_count(
            proposalinfo_version.get('ProposalID')) == [4, 1, 0, 0]
        assert pip_obj.get_accuverifiers_count(
            proposalinfo_cancel.get('ProposalID')) == [4, 0, 0, 1]

        report_information = mock_duplicate_sign(
            2, client_verifier_obj_list[2].node.nodekey,
            client_verifier_obj_list[2].node.blsprikey, 41)
        log.info("Report information: {}".format(report_information))
        address, _ = pip_obj.economic.account.generate_account(
            pip_obj.node.web3, 10**18 * 1000)
        result = client_verifier_obj_list[
            -1].duplicatesign.reportDuplicateSign(2, report_information,
                                                  address)
        log.info('Node duplicate block result : {}'.format(result))
        assert_code(result, 0)
        assert pip_obj.get_accuverifiers_count(
            proposalinfo_version.get('ProposalID')) == [4, 0, 0, 0]
        assert pip_obj.get_accuverifiers_count(
            proposalinfo_cancel.get('ProposalID')) == [4, 0, 0, 0]
Example #9
0
    def test_AC_IN_001_002_004_to_006_012_to_014(self, new_genesis_env, clients_consensus):
        # genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
        # genesis.economicModel.slashing.maxEvidenceAge = 1
        # new_genesis_env.set_genesis(genesis.to_dict())
        new_genesis_env.deploy_all()
        pip = clients_consensus[-1].pip
        result = pip.submitVersion(pip.node.node_id, str(time.time()), pip.cfg.version5, 12, pip.node.staking_address,
                                   transaction_cfg=pip.cfg.transaction_cfg)
        log.info('Submit version proposal result : {}'.format(result))
        assert_code(result, 0)
        proposalinfo_version = pip.get_effect_proposal_info_of_vote()
        log.info('Get version proposal information : {}'.format(proposalinfo_version))

        result = pip.submitCancel(pip.node.node_id, str(time.time()), 10, proposalinfo_version.get('ProposalID'),
                                  pip.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
        log.info('Submit cancel proposal result : {}'.format(result))
        assert_code(result, 0)
        proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
        log.info('Get cancel proposal information : {}'.format(proposalinfo_version))

        for index in range(3):
            log.info(f'index == {index}')
            client = clients_consensus[index]
            result = version_proposal_vote(client.pip)
            assert_code(result, 0)
            result = client.pip.vote(client.node.node_id, proposalinfo_cancel.get('ProposalID'), index + 1,
                                     client.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
            log.info('Node {} vote cancel proposal result : {}'.format(client.node.node_id, result))
            assert_code(result, 0)
        log.info(f'blocknumber0000 == {pip.node.block_number}')
        log.info(f'getCandidateList == {pip.node.ppos.getCandidateList()}')
        assert pip.get_accuverifiers_count(proposalinfo_version.get('ProposalID')) == [4, 3, 0, 0]
        assert pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 1, 1]
        log.info('Stop the node {}'.format(clients_consensus[0].node.node_id))
        clients_consensus[0].node.stop()
        pip.economic.wait_consensus(pip.node, 2)
        log.info(pip.node.debug.getWaitSlashingNodeList())
        log.info(pip.pip.listGovernParam())
        log.info(clients_consensus[1].ppos.getCandidateInfo(pip.node.node_id, pip.node.staking_address))
        assert pip.get_accuverifiers_count(proposalinfo_version.get('ProposalID')) == [4, 3, 0, 0]
        assert pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 1, 1]

        log.info(f'blocknumber1111 == {pip.node.block_number}')
        report_information = mock_duplicate_sign(1, clients_consensus[1].node.nodekey,
                                                 clients_consensus[1].node.blsprikey, 41)
        log.info("Report information: {}".format(report_information))
        address, _ = pip.economic.account.generate_account(pip.node.web3, 10 ** 18 * 1000)
        result = clients_consensus[-1].duplicatesign.reportDuplicateSign(1, report_information, address)
        log.info('Node duplicate block result : {}'.format(result))
        assert_code(result, 0)
        log.info(f'blocknumber2222 == {pip.node.block_number}')
        assert pip.get_accuverifiers_count(proposalinfo_version.get('ProposalID')) == [4, 2, 0, 0]
        assert pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 0, 1]

        report_information = mock_duplicate_sign(2, clients_consensus[2].node.nodekey,
                                                 clients_consensus[2].node.blsprikey, 41)
        log.info("Report information: {}".format(report_information))
        address, _ = pip.economic.account.generate_account(pip.node.web3, 10 ** 18 * 1000)
        result = clients_consensus[-1].duplicatesign.reportDuplicateSign(2, report_information, address)
        log.info('Node duplicate block result : {}'.format(result))
        assert_code(result, 0)
        assert pip.get_accuverifiers_count(proposalinfo_version.get('ProposalID')) == [4, 1, 0, 0]
        assert pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 0, 0]