示例#1
0
    def test_AC_IN_003_008_010(self, new_genesis_env, clients_consensus):
        genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
        genesis.economicModel.gov.textProposalVoteDurationSeconds = 120
        new_genesis_env.set_genesis(genesis.to_dict())
        new_genesis_env.deploy_all()
        pip = clients_consensus[-1].pip
        submittpandvote(clients_consensus, 1, 2, 3, 1)
        proposalinfo = pip.get_effect_proposal_info_of_vote(pip.cfg.text_proposal)
        log.info('Get text proposal information : {}'.format(proposalinfo))
        assert pip.get_accuverifiers_count(proposalinfo.get('ProposalID')) == [4, 2, 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)
        assert pip.get_accuverifiers_count(proposalinfo.get('ProposalID')) == [4, 2, 1, 1]

        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)
        assert pip.get_accuverifiers_count(proposalinfo.get('ProposalID')) == [4, 2, 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.get('ProposalID')) == [4, 2, 0, 0]
def test_PIP_PVF_009(new_genesis_env):
    """
    治理修改区块双签-证据有效期(节点质押退回锁定周期-1)
    :param new_genesis_env:
    :return:
    """
    # Change configuration parameters
    genesis = from_dict(data_class=Genesis,
                        data=new_genesis_env.genesis_config)
    genesis.economicModel.staking.unStakeFreezeDuration = 3
    genesis.economicModel.slashing.maxEvidenceAge = 1
    new_file = new_genesis_env.cfg.env_tmp + "/genesis_0.13.0.json"
    genesis.to_file(new_file)
    new_genesis_env.deploy_all(new_file)

    first_client = get_client_consensus(new_genesis_env, staking_cfg)
    log.info("Current connection non-consensus node:{}".format(
        first_client.node.node_mark))
    economic = first_client.economic
    node = first_client.node
    change_parameter_value = '2'
    # view Parameter value before treatment
    first_slash_blocks = get_governable_parameter_value(
        first_client, 'maxEvidenceAge')
    # create Parametric proposal
    param_governance_verify(first_client, 'slashing', 'maxEvidenceAge',
                            change_parameter_value)
    # view Parameter value before treatment again
    second_slash_blocks = get_governable_parameter_value(
        first_client, 'maxEvidenceAge')
    assert second_slash_blocks != first_slash_blocks, "ErrMsg:Parameter value after treatment {}".format(
        second_slash_blocks)
    assert second_slash_blocks == change_parameter_value, "ErrMsg:Parameter value after treatment {}".format(
        second_slash_blocks)
    report_address, _ = economic.account.generate_account(
        node.web3, node.web3.toWei(1000, 'ether'))
    # wait consensus block
    economic.wait_consensus_blocknum(node)
    # Verify changed parameters
    first_effective_block = economic.get_front_settlement_switchpoint(
        node, int(first_slash_blocks))
    log.info("first effective block height: {}".format(first_effective_block))
    second_effective_block = economic.get_front_settlement_switchpoint(
        node, int(second_slash_blocks))
    log.info(
        "second effective block height: {}".format(second_effective_block))
    # first Report prepareblock signature
    report_information = mock_duplicate_sign(1, node.nodekey, node.blsprikey,
                                             first_effective_block)
    log.info("Report information: {}".format(report_information))
    result = first_client.duplicatesign.reportDuplicateSign(
        1, report_information, report_address)
    assert_code(result, 0)
    # second Report prepareblock signature
    report_information = mock_duplicate_sign(1, node.nodekey, node.blsprikey,
                                             second_effective_block)
    log.info("Report information: {}".format(report_information))
    result = first_client.duplicatesign.reportDuplicateSign(
        1, report_information, report_address)
    assert_code(result, 303000)
示例#3
0
    def test_AC_IN_018_to_025(self, new_genesis_env, clients_consensus):
        genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
        genesis.economicModel.gov.paramProposalVoteDurationSeconds = 0
        new_genesis_env.set_genesis(genesis.to_dict())
        new_genesis_env.deploy_all()
        pip = clients_consensus[0].pip
        pip_test = clients_consensus[-1].pip
        result = pip.submitParam(pip.node.node_id, str(time.time()), 'slashing', 'slashBlocksReward', '999',
                                 pip.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
        log.info('Node submit param proposal result : {}'.format(result))
        assert_code(result, 0)
        proposalinfo_param = pip.get_effect_proposal_info_of_vote(pip.cfg.param_proposal)
        log.info('Get param proposal information : {}'.format(proposalinfo_param))
        result = pip.submitCancel(pip.node.node_id, str(time.time()), 3, proposalinfo_param.get('ProposalID'),
                                  pip.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
        log.info('Node submit cancel proposal result : {}'.format(result))
        proposalinfo_cancel = pip.get_effect_proposal_info_of_vote(pip.cfg.cancel_proposal)
        log.info('Get cancel proposal information : {}'.format(proposalinfo_cancel))
        for index in range(3):
            client = clients_consensus[index]
            result = client.pip.vote(client.node.node_id, proposalinfo_param.get('ProposalID'), index + 1,
                                     client.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
            log.info('Node {} vote param proposal result : {}'.format(client.node.node_id, result))
            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)
        assert pip.get_accuverifiers_count(proposalinfo_param.get('ProposalID')) == [4, 1, 1, 1]
        assert pip.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 1, 1]
        log.info('Stop the node {}'.format(pip.node.node_id))
        pip.node.stop()
        pip_test.economic.wait_consensus(pip_test.node, 2)
        assert pip_test.get_accuverifiers_count(proposalinfo_param.get('ProposalID')) == [4, 1, 1, 1]
        assert pip_test.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 1, 1]

        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_test.economic.account.generate_account(pip_test.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)
        time.sleep(2)
        assert pip_test.get_accuverifiers_count(proposalinfo_param.get('ProposalID')) == [4, 1, 0, 1]
        assert pip_test.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_test.economic.account.generate_account(pip_test.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_test.get_accuverifiers_count(proposalinfo_param.get('ProposalID')) == [4, 1, 0, 0]
        assert pip_test.get_accuverifiers_count(proposalinfo_cancel.get('ProposalID')) == [4, 1, 0, 0]
def test_PIP_PVF_008(new_genesis_env):
    """
    治理修改区块双签-证据有效期处于已生效期
    :param new_genesis_env:
    :return:
    """
    # Change configuration parameters
    adjust_initial_parameters(new_genesis_env)
    first_client = get_client_consensus(new_genesis_env, staking_cfg)
    log.info("Current connection non-consensus node:{}".format(
        first_client.node.node_mark))
    economic = first_client.economic
    node = first_client.node
    change_parameter_value = '1'
    # view Parameter value before treatment
    first_slash_blocks = get_governable_parameter_value(
        first_client, 'maxEvidenceAge')
    # create Parametric proposal
    param_governance_verify(first_client, 'slashing', 'maxEvidenceAge',
                            change_parameter_value)
    # view Parameter value before treatment again
    second_slash_blocks = get_governable_parameter_value(
        first_client, 'maxEvidenceAge')
    assert second_slash_blocks != first_slash_blocks, "ErrMsg:Parameter value after treatment {}".format(
        second_slash_blocks)
    assert second_slash_blocks == change_parameter_value, "ErrMsg:Parameter value after treatment {}".format(
        second_slash_blocks)
    report_address, _ = economic.account.generate_account(
        node.web3, node.web3.toWei(1000, 'ether'))
    # wait consensus block
    economic.wait_consensus_blocknum(node)
    # Verify changed parameters
    effective_block = economic.get_front_settlement_switchpoint(
        node, int(second_slash_blocks))
    log.info("effective_block block height: {}".format(effective_block))
    # wait consensus block
    economic.wait_consensus_blocknum(node)
    # first Report prepareblock signature
    report_information = mock_duplicate_sign(1, node.nodekey, node.blsprikey,
                                             economic.consensus_size + 1)
    log.info("Report information: {}".format(report_information))
    result = first_client.duplicatesign.reportDuplicateSign(
        1, report_information, report_address)
    assert_code(result, 303003)
    # second Report prepareblock signature
    report_information = mock_duplicate_sign(1, node.nodekey, node.blsprikey,
                                             effective_block)
    log.info("Report information: {}".format(report_information))
    result = first_client.duplicatesign.reportDuplicateSign(
        1, report_information, report_address)
    assert_code(result, 0)
示例#5
0
def test_CS_CL_010_030(clients_new_node):
    """
    :param global_test_env:
    :param client_new_node:
    :return:
    """
    client = clients_new_node[0]
    address, _ = client.economic.account.generate_account(
        client.node.web3, 10**18 * 10000000)
    value = client.economic.create_staking_limit * 2
    result = client.staking.create_staking(0, address, address, amount=value)
    assert_code(result, 0)
    log.info("The next  periods")
    client.economic.wait_settlement_blocknum(client.node)
    log.info("The next consensus cycle")
    client.economic.wait_consensus_blocknum(client.node)
    number = client.node.eth.blockNumber
    log.info("To report the double sign")
    report_information = mock_duplicate_sign(1, client.node.nodekey,
                                             client.node.blsprikey, number)

    log.info("Report information: {}".format(report_information))
    address, _ = client.economic.account.generate_account(
        client.node.web3, 10**18 * 10000000)
    result = client.duplicatesign.reportDuplicateSign(1, report_information,
                                                      address)
    log.info(result)

    log.info("The next  periods")
    client.economic.wait_settlement_blocknum(client.node)
    verifierlist = get_pledge_list(client.ppos.getVerifierList)
    log.info("verifierlist:{}".format(verifierlist))
    assert client.node.node_id not in verifierlist
示例#6
0
def test_PIP_PVF_010(new_genesis_env, client_con_list_obj):
    """
    治理修改区块双签-证据有效期(超出有效期)
    :param new_genesis_env:
    :param client_con_list_obj:
    :return:
    """
    # Change configuration parameters
    adjust_initial_parameters(new_genesis_env)
    # view Parameter value before treatment
    slash_blocks1 = get_governable_parameter_value(client_con_list_obj[0], 'maxEvidenceAge')
    assert slash_blocks1 == '2', "ErrMsg:Parameter value before treatment {}".format(slash_blocks1)
    # create Parametric proposal
    param_governance_verify(client_con_list_obj[0], 'slashing', 'maxEvidenceAge', '1')
    # view Parameter value before treatment again
    slash_blocks2 = get_governable_parameter_value(client_con_list_obj[0], 'maxEvidenceAge')
    assert slash_blocks2 == '1', "ErrMsg:Parameter value after treatment {}".format(slash_blocks2)
    report_address, _ = client_con_list_obj[0].economic.account.generate_account(client_con_list_obj[0].node.web3,
                                                                                 client_con_list_obj[0].node.web3.toWei(
                                                                                     1000, 'ether'))
    # wait consensus block
    client_con_list_obj[0].economic.wait_consensus_blocknum(client_con_list_obj[0].node)
    # Verify changed parameters
    effective_block1 = client_con_list_obj[0].economic.get_front_settlement_switchpoint(client_con_list_obj[0].node,
                                                                                        int(slash_blocks1))
    log.info("Effective1 block height: {}".format(effective_block1))
    # Report1 prepareblock signature
    report_information = mock_duplicate_sign(1, client_con_list_obj[0].node.nodekey,
                                             client_con_list_obj[0].node.blsprikey,
                                             effective_block1)
    log.info("Report information: {}".format(report_information))
    result = client_con_list_obj[0].duplicatesign.reportDuplicateSign(1, report_information, report_address)
    assert_code(result, 303003)
示例#7
0
def test_PIP_PVF_009(new_genesis_env, client_con_list_obj):
    """
    治理修改区块双签-证据有效期(节点质押退回锁定周期-1)
    :param new_genesis_env:
    :param client_con_list_obj:
    :return:
    """
    # Change configuration parameters
    genesis = from_dict(data_class=Genesis, data=new_genesis_env.genesis_config)
    genesis.economicModel.staking.unStakeFreezeDuration = 3
    genesis.economicModel.slashing.maxEvidenceAge = 1
    new_file = new_genesis_env.cfg.env_tmp + "/genesis.json"
    genesis.to_file(new_file)
    new_genesis_env.deploy_all(new_file)
    # view Parameter value before treatment
    slash_blocks1 = get_governable_parameter_value(client_con_list_obj[0], 'maxEvidenceAge')
    # create Parametric proposal
    param_governance_verify(client_con_list_obj[0], 'slashing', 'maxEvidenceAge', '2')
    # view Parameter value before treatment again
    slash_blocks2 = get_governable_parameter_value(client_con_list_obj[0], 'maxEvidenceAge')
    assert slash_blocks2 == '2', "ErrMsg:Parameter value after treatment {}".format(slash_blocks2)
    report_address, _ = client_con_list_obj[0].economic.account.generate_account(client_con_list_obj[0].node.web3,
                                                                                 client_con_list_obj[0].node.web3.toWei(
                                                                                     1000, 'ether'))
    # wait consensus block
    client_con_list_obj[0].economic.wait_consensus_blocknum(client_con_list_obj[0].node)
    # Verify changed parameters
    effective_block1 = client_con_list_obj[0].economic.get_front_settlement_switchpoint(client_con_list_obj[0].node,
                                                                                        int(slash_blocks1))
    effective_block2 = client_con_list_obj[0].economic.get_front_settlement_switchpoint(client_con_list_obj[0].node,
                                                                                        int(slash_blocks2))
    log.info("Effective1 block height: {}".format(effective_block1))
    log.info("Effective2 block height: {}".format(effective_block2))
    # Report1 prepareblock signature
    report_information = mock_duplicate_sign(1, client_con_list_obj[0].node.nodekey,
                                             client_con_list_obj[0].node.blsprikey,
                                             effective_block1)
    log.info("Report information: {}".format(report_information))
    result = client_con_list_obj[0].duplicatesign.reportDuplicateSign(1, report_information, report_address)
    assert_code(result, 0)
    # Report2 prepareblock signature
    report_information = mock_duplicate_sign(1, client_con_list_obj[0].node.nodekey,
                                             client_con_list_obj[0].node.blsprikey,
                                             effective_block2)
    log.info("Report information: {}".format(report_information))
    result = client_con_list_obj[0].duplicatesign.reportDuplicateSign(1, report_information, report_address)
    assert_code(result, 303000)
示例#8
0
def test_UP_FV_014(client_new_node, reset_environment):
    """
    锁仓验证人违规被剔除验证人列表,申请赎回委托金
    :param client_new_node:
    :param reset_environment:
    :return:
    """
    client = client_new_node
    economic = client.economic
    node = client.node
    # create account
    amount1 = von_amount(economic.create_staking_limit, 2)
    amount2 = von_amount(economic.create_staking_limit, 1)
    address1, report_address = create_account_amount(client, amount1, amount2)
    # create Restricting Plan
    delegate_amount = von_amount(economic.delegate_limit, 10)
    plan = [{'Epoch': 3, 'Amount': delegate_amount}]
    result = client.restricting.createRestrictingPlan(report_address, plan,
                                                      report_address)
    assert_code(result, 0)
    # create staking
    result = client.staking.create_staking(0, address1, address1)
    assert_code(result, 0)
    # Application for Commission
    result = client.delegate.delegate(1, report_address)
    assert_code(result, 0)
    # Waiting for the end of the settlement period
    economic.wait_settlement_blocknum(node)
    #
    for i in range(4):
        result = check_node_in_list(node.node_id, client.ppos.getValidatorList)
        log.info("Current node in consensus list status:{}".format(result))
        if result:
            # view current block
            current_block = node.eth.blockNumber
            log.info("Current block: {}".format(current_block))
            # Report prepareblock signature
            report_information = mock_duplicate_sign(1, node.nodekey,
                                                     node.blsprikey,
                                                     current_block)
            log.info("Report information: {}".format(report_information))
            result = client.duplicatesign.reportDuplicateSign(
                1, report_information, report_address)
            assert_code(result, 0)
            time.sleep(3)
            # Access to pledge information
            candidate_info = client.ppos.getCandidateInfo(node.node_id)
            info = candidate_info['Ret']
            staking_blocknum = info['StakingBlockNum']
            # withdrew delegate
            result = client.delegate.withdrew_delegate(staking_blocknum,
                                                       report_address)
            assert_code(result, 0)
            break
        else:
            # wait consensus block
            client.economic.wait_consensus_blocknum(node)
示例#9
0
def duplicate_sign(client_obj, report_address, report_block):
    if report_block < 41:
        report_block = 41
    # Report1 prepareblock signature
    report_information = mock_duplicate_sign(1, client_obj.node.nodekey,
                                             client_obj.node.blsprikey,
                                             report_block)
    log.info("Report information: {}".format(report_information))
    result = client_obj.duplicatesign.reportDuplicateSign(1, report_information, report_address)
    assert_code(result, 0)
示例#10
0
def test_UP_FV_013(client_new_node, reset_environment):
    """
    锁仓验证人违规被剔除验证人列表,申请退回质押金
    :param client_new_node:
    :return:
    """
    client1 = client_new_node
    economic = client1.economic
    node = client1.node
    # create account
    amount1 = von_amount(economic.create_staking_limit, 3)
    amount2 = von_amount(economic.create_staking_limit, 1)
    address1, report_address = create_account_amount(client1, amount1, amount2)
    # create Restricting Plan
    delegate_amount = von_amount(economic.create_staking_limit, 2)
    plan = [{'Epoch': 3, 'Amount': delegate_amount}]
    result = client1.restricting.createRestrictingPlan(address1, plan,
                                                       address1)
    assert_code(result, 0)
    # view restricting plan again
    restricting_info = client1.ppos.getRestrictingInfo(address1)
    log.info("restricting plan informtion: {}".format(restricting_info))
    # create staking
    result = client1.staking.create_staking(1, address1, address1)
    assert_code(result, 0)
    # view restricting plan again
    restricting_info = client1.ppos.getRestrictingInfo(address1)
    log.info("restricting plan informtion: {}".format(restricting_info))
    # Waiting for the end of the settlement period
    economic.wait_settlement_blocknum(node)
    #
    for i in range(4):
        result = check_node_in_list(node.node_id,
                                    client1.ppos.getValidatorList)
        log.info("Current node in consensus list status:{}".format(result))
        if result:
            # view current block
            current_block = node.eth.blockNumber
            log.info("Current block: {}".format(current_block))
            # Report prepareblock signature
            report_information = mock_duplicate_sign(1, node.nodekey,
                                                     node.blsprikey,
                                                     current_block)
            log.info("Report information: {}".format(report_information))
            result = client1.duplicatesign.reportDuplicateSign(
                1, report_information, report_address)
            assert_code(result, 0)
            time.sleep(3)
            # withdrew staking
            result = client1.staking.withdrew_staking(address1)
            assert_code(result, 301103)
            break
        else:
            # wait consensus block
            client1.economic.wait_consensus_blocknum(node)
def duplicate_sign(client, report_address, report_block):
    if report_block <= client.economic.consensus_size:
        report_block = client.economic.consensus_size + 1
    # Report1 prepareblock signature
    report_information = mock_duplicate_sign(1, client.node.nodekey,
                                             client.node.blsprikey,
                                             report_block)
    log.info("Report information: {}".format(report_information))
    result = client.duplicatesign.reportDuplicateSign(1, report_information,
                                                      report_address)
    assert_code(result, 0)
示例#12
0
def test_AL_NBI_016(client_new_node_obj, reset_environment):
    """
    被双签处罚槛剔除验证人列表
    :param client_new_node_obj:
    :return:
    """
    client = client_new_node_obj
    economic = client.economic
    node = client.node
    client.economic.env.deploy_all()
    # create account
    address1, _ = economic.account.generate_account(node.web3, von_amount(economic.create_staking_limit, 2))
    address2, _ = economic.account.generate_account(node.web3, 0)
    report_address, _ = economic.account.generate_account(node.web3, node.web3.toWei(1000, 'ether'))
    # create staking
    staking_amount = von_amount(economic.create_staking_limit, 1.6)
    result = client_new_node_obj.staking.create_staking(0, address2, address1, amount=staking_amount)
    assert_code(result, 0)
    # wait settlement block
    economic.wait_settlement_blocknum(node)
    # Check account balance
    balance = node.eth.getBalance(address2)
    log.info("Account Balance:{}".format(balance))
    # view block_reward
    block_reward, staking_reward = economic.get_current_year_reward(node)
    log.info("block_reward: {} staking_reward: {}".format(block_reward, staking_reward))
    for i in range(4):
        result = check_node_in_list(client_new_node_obj.node.node_id, client_new_node_obj.ppos.getValidatorList)
        log.info("Current node in consensus list status:{}".format(result))
        if result:
            # view Current block
            current_block = client_new_node_obj.node.eth.blockNumber
            log.info("Current block: {}".format(current_block))
            # Report prepareblock signature
            report_information = mock_duplicate_sign(1, client_new_node_obj.node.nodekey, client_new_node_obj.node.blsprikey, current_block)
            log.info("Report information: {}".format(report_information))
            result = client_new_node_obj.duplicatesign.reportDuplicateSign(1, report_information, report_address)
            assert_code(result, 0)
            # wait settlement block
            economic.wait_settlement_blocknum(node)
            # Check account balance again
            balance1 = node.eth.getBalance(address2)
            log.info("Account Balance:{}".format(balance1))
            # count the number of blocks
            blocknumber = client_new_node_obj.economic.get_block_count_number(node, 10)
            log.info("blocknumber: {}".format(blocknumber))
            total_block_reward = int(Decimal(str(block_reward)) * Decimal(str(blocknumber)))
            log.info("total_block_reward: {}".format(total_block_reward))
            assert balance1 == balance + total_block_reward, "ErrMsg:benifit_balance1:{}".format(balance1)
            break
        else:
            # wait consensus block
            economic.wait_consensus_blocknum(node)
示例#13
0
def test_reportDuplicateSign_receipt(set_not_need_analyze):
    client = set_not_need_analyze
    node = client.node
    economic = client.economic
    address, _ = economic.account.generate_account(
        node.web3, economic.create_staking_limit * 2)
    number = client.node.eth.blockNumber
    report_information = mock_duplicate_sign(1, client.node.nodekey,
                                             client.node.blsprikey, number)
    address_, _ = economic.account.generate_account(
        node.web3, economic.create_staking_limit * 2)
    hash = client.duplicatesign.reportDuplicateSign(1, report_information,
                                                    address_)
    key = "topics"
    expected_result = []
    check_receipt(node, hash, key, expected_result)
示例#14
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]
示例#15
0
def test_CS_CL_017_018_019(status, clients_new_node, clients_consensus):
    """
    :param status:
    :param global_test_env:
    :param client_con_list_obj:
    :param clients_noconsensus:
    :return:
    """
    client_noconsensus1 = clients_new_node[0]
    client_noconsensus2 = clients_new_node[1]
    client_consensus1 = clients_consensus[0]
    client_consensus2 = clients_consensus[1]
    client_consensus3 = clients_consensus[2]
    client_consensus4 = clients_consensus[3]

    log.info("The next consensus cycle")
    client_consensus1.economic.wait_consensus_blocknum(client_consensus1.node,
                                                       number=1)

    validatorlist = get_pledge_list(client_consensus1.ppos.getValidatorList)
    log.info("initial validatorlist:{}".format(validatorlist))
    blocknumber = client_consensus1.node.eth.blockNumber
    log.info("The thrill of being reported{}".format(blocknumber))

    log.info("To report the double sign")
    report_information1 = mock_duplicate_sign(1,
                                              client_consensus1.node.nodekey,
                                              client_consensus1.node.blsprikey,
                                              blocknumber)
    log.info("Report information: {}".format(report_information1))

    address, _ = client_noconsensus1.economic.account.generate_account(
        client_noconsensus1.node.web3, 10**18 * 10000000)
    result = client_consensus1.duplicatesign.reportDuplicateSign(
        1, report_information1, address)
    log.info(result)
    log.info("The next  periods")
    client_noconsensus2.economic.wait_settlement_blocknum(
        client_noconsensus2.node)
    validatorlist = get_pledge_list(client_consensus1.ppos.getValidatorList)
    log.info("After being reported validatorlist:{}".format(validatorlist))

    if status == 0:
        address1, _ = client_noconsensus1.economic.account.generate_account(
            client_noconsensus1.node.web3, 10**18 * 10000000)
        value = client_noconsensus1.economic.create_staking_limit * 2
        result = client_noconsensus1.staking.create_staking(0,
                                                            address1,
                                                            address1,
                                                            amount=value)
        assert_code(result, 0)
        log.info("The next  periods")
        client_noconsensus2.economic.wait_settlement_blocknum(
            client_noconsensus2.node)
        log.info("The next consensus cycle")
        client_noconsensus2.economic.wait_consensus_blocknum(
            client_noconsensus2.node)
        validatorlist = get_pledge_list(
            client_noconsensus2.ppos.getValidatorList)
        log.info("validatorlist:{}".format(validatorlist))
        assert client_consensus2.node.node_id in validatorlist
        assert client_consensus3.node.node_id in validatorlist
        assert client_consensus4.node.node_id in validatorlist
        assert client_noconsensus1.node.node_id in validatorlist

    if status == 1:
        address1, _ = client_noconsensus1.economic.account.generate_account(
            client_noconsensus1.node.web3, 10**18 * 10000000)
        value = client_noconsensus1.economic.create_staking_limit * 2
        result = client_noconsensus1.staking.create_staking(0,
                                                            address1,
                                                            address1,
                                                            amount=value)
        assert_code(result, 0)

        address2, _ = client_noconsensus1.economic.account.generate_account(
            client_noconsensus1.node.web3, 10**18 * 10000000)
        value = client_noconsensus1.economic.create_staking_limit * 2
        result = client_noconsensus2.staking.create_staking(0,
                                                            address2,
                                                            address2,
                                                            amount=value)
        assert_code(result, 0)

        log.info("The next  periods")
        client_noconsensus2.economic.wait_settlement_blocknum(
            client_noconsensus2.node)
        log.info("The next consensus cycle")
        client_noconsensus2.economic.wait_consensus_blocknum(
            client_noconsensus2.node)

        validatorlist = get_pledge_list(
            client_noconsensus2.ppos.getValidatorList)
        log.info("validatorlist:{}".format(validatorlist))
        assert client_consensus2.node.node_id in validatorlist
        assert client_consensus3.node.node_id in validatorlist
        assert client_consensus4.node.node_id in validatorlist
示例#16
0
def test_CS_CL_014_015_016_029(status, global_test_env, client_con_list_obj,
                               client_noc_list_obj):
    """
    :param status:
    :param global_test_env:
    :param client_con_list_obj:
    :param client_noc_list_obj:
    :return:
    """
    global_test_env.deploy_all()

    log.info("The next consensus cycle")
    client_con_list_obj[0].economic.wait_consensus_blocknum(
        client_con_list_obj[0].node, number=1)
    blocknumber = client_con_list_obj[0].node.eth.blockNumber

    log.info("To report the double sign")
    report_information1 = mock_duplicate_sign(
        1, client_con_list_obj[0].node.nodekey,
        client_con_list_obj[0].node.blsprikey, blocknumber)
    log.info("Report information: {}".format(report_information1))

    report_information2 = mock_duplicate_sign(
        1, client_con_list_obj[1].node.nodekey,
        client_con_list_obj[1].node.blsprikey, blocknumber)
    log.info("Report information: {}".format(report_information2))

    report_information3 = mock_duplicate_sign(
        1, client_con_list_obj[2].node.nodekey,
        client_con_list_obj[2].node.blsprikey, blocknumber)
    log.info("Report information: {}".format(report_information3))

    address_1, _ = client_noc_list_obj[0].economic.account.generate_account(
        client_noc_list_obj[0].node.web3, 10**18 * 10000000)
    address_2, _ = client_noc_list_obj[0].economic.account.generate_account(
        client_noc_list_obj[0].node.web3, 10**18 * 10000000)
    address_3, _ = client_noc_list_obj[0].economic.account.generate_account(
        client_noc_list_obj[0].node.web3, 10**18 * 10000000)
    result = client_con_list_obj[0].duplicatesign.reportDuplicateSign(
        1, report_information1, address_1)
    log.info(result)
    result = client_con_list_obj[1].duplicatesign.reportDuplicateSign(
        1, report_information2, address_2)
    log.info(result)
    result = client_con_list_obj[2].duplicatesign.reportDuplicateSign(
        1, report_information3, address_3)
    log.info(result)
    log.info("The next  periods")
    client_noc_list_obj[1].economic.wait_settlement_blocknum(
        client_noc_list_obj[1].node)
    validatorlist = get_pledge_list(
        client_con_list_obj[0].ppos.getValidatorList)
    log.info("After being reported validatorlist:{}".format(validatorlist))

    if status == 0:
        address1, _ = client_noc_list_obj[0].economic.account.generate_account(
            client_noc_list_obj[0].node.web3, 10**18 * 10000000)
        value = client_noc_list_obj[0].economic.create_staking_limit * 2
        result = client_noc_list_obj[0].staking.create_staking(0,
                                                               address1,
                                                               address1,
                                                               amount=value)
        assert_code(result, 0)

        address2, _ = client_noc_list_obj[0].economic.account.generate_account(
            client_noc_list_obj[0].node.web3, 10**18 * 10000000)
        value = client_noc_list_obj[0].economic.create_staking_limit * 2
        result = client_noc_list_obj[1].staking.create_staking(0,
                                                               address2,
                                                               address2,
                                                               amount=value)
        assert_code(result, 0)

        log.info("The next  periods")
        client_noc_list_obj[1].economic.wait_settlement_blocknum(
            client_noc_list_obj[1].node)

        log.info("The next consensus cycle")
        client_noc_list_obj[1].economic.wait_consensus_blocknum(
            client_noc_list_obj[1].node)

        validatorlist = get_pledge_list(
            client_noc_list_obj[1].ppos.getValidatorList)
        log.info("validatorlist:{}".format(validatorlist))
        log.info("node1:{}".format(client_noc_list_obj[0].node.node_id))
        log.info("node2:{}".format(client_noc_list_obj[1].node.node_id))
        log.info("node3:{}".format(client_con_list_obj[3].node.node_id))
        assert client_noc_list_obj[0].node.node_id in validatorlist
        assert client_noc_list_obj[1].node.node_id in validatorlist
        assert client_con_list_obj[3].node.node_id in validatorlist

    if status == 1:
        address1, _ = client_noc_list_obj[0].economic.account.generate_account(
            client_noc_list_obj[0].node.web3, 10**18 * 10000000)
        value = client_noc_list_obj[0].economic.create_staking_limit * 2
        result = client_noc_list_obj[0].staking.create_staking(0,
                                                               address1,
                                                               address1,
                                                               amount=value)
        assert_code(result, 0)

        address2, _ = client_noc_list_obj[0].economic.account.generate_account(
            client_noc_list_obj[0].node.web3, 10**18 * 10000000)
        value = client_noc_list_obj[0].economic.create_staking_limit * 2
        result = client_noc_list_obj[1].staking.create_staking(0,
                                                               address2,
                                                               address2,
                                                               amount=value)
        assert_code(result, 0)

        address3, _ = client_noc_list_obj[0].economic.account.generate_account(
            client_noc_list_obj[0].node.web3, 10**18 * 10000000)
        value = client_noc_list_obj[0].economic.create_staking_limit * 2
        result = client_noc_list_obj[2].staking.create_staking(0,
                                                               address3,
                                                               address3,
                                                               amount=value)
        assert_code(result, 0)
        log.info("The next  periods")
        client_noc_list_obj[1].economic.wait_settlement_blocknum(
            client_noc_list_obj[1].node)

        log.info("The next consensus cycle")
        client_noc_list_obj[1].economic.wait_consensus_blocknum(
            client_noc_list_obj[1].node)

        validatorlist = get_pledge_list(
            client_noc_list_obj[1].ppos.getValidatorList)
        log.info("validatorlist:{}".format(validatorlist))
        log.info("node1:{}".format(client_noc_list_obj[0].node.node_id))
        log.info("node2:{}".format(client_noc_list_obj[1].node.node_id))
        log.info("node3:{}".format(client_noc_list_obj[2].node.node_id))
        log.info("node4:{}".format(client_con_list_obj[3].node.node_id))
        assert client_noc_list_obj[0].node.node_id in validatorlist
        assert client_noc_list_obj[1].node.node_id in validatorlist
        assert client_noc_list_obj[2].node.node_id in validatorlist
        assert client_con_list_obj[3].node.node_id in validatorlist

    if status == 2:
        address1, _ = client_noc_list_obj[0].economic.account.generate_account(
            client_noc_list_obj[0].node.web3, 10**18 * 10000000)
        value = client_noc_list_obj[0].economic.create_staking_limit * 2
        result = client_noc_list_obj[0].staking.create_staking(0,
                                                               address1,
                                                               address1,
                                                               amount=value)
        assert_code(result, 0)

        address2, _ = client_noc_list_obj[0].economic.account.generate_account(
            client_noc_list_obj[0].node.web3, 10**18 * 10000000)
        value = client_noc_list_obj[0].economic.create_staking_limit * 2
        result = client_noc_list_obj[1].staking.create_staking(0,
                                                               address2,
                                                               address2,
                                                               amount=value)
        assert_code(result, 0)

        address3, _ = client_noc_list_obj[0].economic.account.generate_account(
            client_noc_list_obj[0].node.web3, 10**18 * 10000000)
        value = client_noc_list_obj[0].economic.create_staking_limit * 2
        result = client_noc_list_obj[2].staking.create_staking(0,
                                                               address3,
                                                               address3,
                                                               amount=value)
        assert_code(result, 0)

        address4, _ = client_noc_list_obj[0].economic.account.generate_account(
            client_noc_list_obj[0].node.web3, 10**18 * 10000000)
        value = client_noc_list_obj[0].economic.create_staking_limit * 2
        result = client_noc_list_obj[3].staking.create_staking(0,
                                                               address4,
                                                               address4,
                                                               amount=value)
        assert_code(result, 0)

        log.info("The next  periods")
        client_noc_list_obj[1].economic.wait_settlement_blocknum(
            client_noc_list_obj[1].node)

        log.info("The next consensus cycle")
        client_noc_list_obj[1].economic.wait_consensus_blocknum(
            client_noc_list_obj[1].node)

        validatorlist = get_pledge_list(
            client_noc_list_obj[1].ppos.getValidatorList)
        log.info("validatorlist:{}".format(validatorlist))
        log.info("node:{}".format(client_con_list_obj[3].node.node_id))
        assert client_con_list_obj[3].node.node_id in validatorlist
示例#17
0
def test_CS_CL_003(clients_new_node, clients_consensus):
    """
    The higher the consensus verifier list block, the higher it is replaced
    :param client_new_node:
    :return:
    """
    client_noconsensus1 = clients_new_node[0]
    client_noconsensus2 = clients_new_node[1]
    client_noconsensus3 = clients_new_node[2]
    client_noconsensus4 = clients_new_node[3]
    client_consensus1 = clients_consensus[0]
    client_consensus2 = clients_consensus[1]
    client_consensus3 = clients_consensus[2]
    validatorlist = get_pledge_list(client_consensus1.ppos.getValidatorList)
    log.info("validatorlist:{}".format(validatorlist))

    log.info("The next consensus cycle")
    client_consensus1.economic.wait_consensus_blocknum(client_consensus1.node,
                                                       number=1)
    blocknumber = client_consensus1.node.eth.blockNumber
    log.info("To report the double sign")
    report_information1 = mock_duplicate_sign(1,
                                              client_consensus1.node.nodekey,
                                              client_consensus1.node.blsprikey,
                                              blocknumber)
    log.info("Report information: {}".format(report_information1))

    report_information2 = mock_duplicate_sign(1,
                                              client_consensus2.node.nodekey,
                                              client_consensus2.node.blsprikey,
                                              blocknumber)
    log.info("Report information: {}".format(report_information2))

    report_information3 = mock_duplicate_sign(1,
                                              client_consensus3.node.nodekey,
                                              client_consensus3.node.blsprikey,
                                              blocknumber)
    log.info("Report information: {}".format(report_information3))

    address_1, _ = client_noconsensus1.economic.account.generate_account(
        client_noconsensus1.node.web3, 10**18 * 10000000)
    address_2, _ = client_noconsensus1.economic.account.generate_account(
        client_noconsensus1.node.web3, 10**18 * 10000000)
    address_3, _ = client_noconsensus1.economic.account.generate_account(
        client_noconsensus1.node.web3, 10**18 * 10000000)
    result = client_consensus1.duplicatesign.reportDuplicateSign(
        1, report_information1, address_1)
    log.info(result)
    result = client_consensus2.duplicatesign.reportDuplicateSign(
        1, report_information2, address_2)
    log.info(result)
    result = client_consensus3.duplicatesign.reportDuplicateSign(
        1, report_information3, address_3)
    log.info(result)
    log.info("The next  periods")
    client_noconsensus3.economic.wait_settlement_blocknum(
        client_noconsensus3.node)
    validatorlist = get_pledge_list(client_consensus1.ppos.getValidatorList)
    log.info("After being reported validatorlist:{}".format(validatorlist))

    staking_address1, _ = client_noconsensus1.economic.account.generate_account(
        client_consensus1.node.web3, 10**18 * 10000000)
    staking_address2, _ = client_noconsensus1.economic.account.generate_account(
        client_consensus1.node.web3, 10**18 * 10000000)
    staking_address3, _ = client_noconsensus1.economic.account.generate_account(
        client_consensus1.node.web3, 10**18 * 10000000)
    staking_address4, _ = client_noconsensus1.economic.account.generate_account(
        client_consensus1.node.web3, 10**18 * 10000000)
    pledge_amount = client_consensus1.economic.create_staking_limit * 2
    log.info("New pledge 4 verifiers")
    result = client_noconsensus1.staking.create_staking(0,
                                                        staking_address1,
                                                        staking_address1,
                                                        amount=pledge_amount)
    assert_code(result, 0)
    result = client_noconsensus2.staking.create_staking(0,
                                                        staking_address2,
                                                        staking_address2,
                                                        amount=pledge_amount)
    assert_code(result, 0)
    result = client_noconsensus3.staking.create_staking(0,
                                                        staking_address3,
                                                        staking_address3,
                                                        amount=pledge_amount)
    assert_code(result, 0)
    result = client_noconsensus4.staking.create_staking(0,
                                                        staking_address4,
                                                        staking_address4,
                                                        amount=pledge_amount)
    assert_code(result, 0)
    log.info("Next settlement period")
    client_noconsensus4.economic.wait_settlement_blocknum(
        client_noconsensus4.node)
    log.info("The next consensus cycle")
    client_noconsensus4.economic.wait_consensus_blocknum(
        client_noconsensus4.node)
    verifierList = get_pledge_list(client_noconsensus4.ppos.getVerifierList)
    log.info("verifierList:{}".format(verifierList))
    validatorlist1 = get_pledge_list(client_noconsensus4.ppos.getValidatorList)
    log.info("validatorlist:{}".format(validatorlist1))
    assert client_noconsensus1.node.node_id in validatorlist1

    client_noconsensus4.economic.wait_consensus_blocknum(
        client_noconsensus4.node)
    verifierList = get_pledge_list(client_noconsensus4.ppos.getVerifierList)
    log.info("verifierList:{}".format(verifierList))
    validatorlist2 = get_pledge_list(client_noconsensus4.ppos.getValidatorList)
    log.info("validatorlist:{}".format(validatorlist2))
    assert client_noconsensus1.node.node_id in validatorlist2

    client_noconsensus4.economic.wait_consensus_blocknum(
        client_noconsensus4.node)
    verifierList = get_pledge_list(client_noconsensus4.ppos.getVerifierList)
    log.info("verifierList:{}".format(verifierList))
    validatorlist3 = get_pledge_list(client_noconsensus4.ppos.getValidatorList)
    log.info("validatorlist:{}".format(validatorlist3))
    assert client_noconsensus1.node.node_id in validatorlist3
示例#18
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]