示例#1
0
    def test_UV_TR_002_003_009_010(self, new_genesis_env, clients_consensus):
        new_genesis_env.deploy_all()
        pip = clients_consensus[0].pip
        submitvpandvote(clients_consensus[:3])
        proposalinfo_version = pip.get_effect_proposal_info_of_vote()
        log.info('Get version proposal information {}'.format(proposalinfo_version))
        wait_block_number(pip.node, proposalinfo_version.get('ActiveBlock'))
        assert pip.get_status_of_proposal(proposalinfo_version.get('ProposalID')) == 5
        assert pip.chain_version == pip.cfg.version5
        assert pip.get_accuverifiers_count(proposalinfo_version.get('ProposalID'))

        result = pip.submitVersion(pip.node.node_id, str(time.time()), pip.cfg.version8, 3,
                                   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()), 1, 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 version proposal information : {}'.format(proposalinfo_cancel))

        upload_platon(pip.node, pip.cfg.PLATON_NEW_BIN8)
        pip.node.restart()

        result = pip.vote(pip.node.node_id, proposalinfo_version.get('ProposalID'), pip.cfg.vote_option_yeas,
                          pip.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
        log.info('Vote result : {}'.format(result))
        assert_code(result, 0)
        result = pip.vote(pip.node.node_id, proposalinfo_cancel.get('ProposalID'), pip.cfg.vote_option_yeas,
                          pip.node.staking_address, transaction_cfg=pip.cfg.transaction_cfg)
        assert_code(result, 0)
        log.info('Node {} vote result : {}'.format(pip.node.node_id, result))
示例#2
0
def replace_platon_vote(pip,
                        bin=None,
                        program_version=None,
                        version_sign=None):
    '''
    Replace the bin package of the node, restart the node
    :param pip:
    :param bin:
    :return:
    '''
    if bin:
        upload_platon(pip.node, bin)
        pip.node.restart()
    if program_version is None:
        program_version = pip.node.program_version
    if version_sign is None:
        version_sign = pip.node.program_version_sign
    proposalinfo = pip.get_effect_proposal_info_of_vote()
    log.info('Get version proposal information {}'.format(proposalinfo))
    result = pip.vote(pip.node.node_id,
                      proposalinfo.get('ProposalID'),
                      pip.cfg.vote_option_yeas,
                      pip.node.staking_address,
                      program_version=program_version,
                      version_sign=version_sign,
                      transaction_cfg=pip.cfg.transaction_cfg)
    log.info('Node {} vote result : {}'.format(pip.node.node_id, result))
    return result
示例#3
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))
示例#4
0
def client_candidate_obj(global_running_env, staking_cfg):
    """
    Get a candidate node Client object
    """
    client_consensus_obj = get_client_consensus_obj(global_running_env, staking_cfg)
    client_list_obj = get_client_list_obj(global_running_env, staking_cfg)
    client_noconsensus_obj_list = get_client_noconsensus_list(global_running_env, staking_cfg)
    if not client_consensus_obj.staking.get_candidate_list_not_verifier():
        log.info('There is no candidate, node stake')
        candidate_list = get_pledge_list(client_consensus_obj.node.ppos.getCandidateList)
        for client in client_noconsensus_obj_list:
            if client.node.node_id not in candidate_list:
                if client.node.program_version != client.pip.cfg.version0:
                    upload_platon(client.node, client.pip.cfg.PLATON_NEW_BIN0)
                    client.node.restart()
                log.info('Node {} staking'.format(client.node.node_id))
                address, _ = client.economic.account.generate_account(client.node.web3, client.economic.create_staking_limit * 5)
                result = client.staking.create_staking(0, address, address)
                log.info('Node {} staking result :{}'.format(client.node.node_id, result))
                assert_code(result, 0)
        client_consensus_obj.economic.wait_settlement_blocknum(client_consensus_obj.node)
    node_id_list = client_consensus_obj.staking.get_candidate_list_not_verifier()
    log.info('Get candidate list no verifier {}'.format(node_id_list))
    if len(node_id_list) == 0:
        raise Exception('Get candidate list no verifier failed')
    return get_client_obj(node_id_list[0], client_list_obj)
示例#5
0
 def test_VE_AD_003(self, new_genesis_env, clients_consensus, all_clients):
     submitvpandvote(clients_consensus)
     proposalinfo = clients_consensus[
         0].pip.get_effect_proposal_info_of_vote()
     log.info('Get version proposal information : {}'.format(proposalinfo))
     wait_block_number(clients_consensus[0].node,
                       proposalinfo.get('ActiveBlock'))
     consensus_node = new_genesis_env.get_rand_node()
     test_node = new_genesis_env.get_a_normal_node()
     test_node.clean()
     test_node.deploy_me(new_genesis_env.cfg.genesis_tmp)
     test_node.admin.addPeer(consensus_node.enode)
     time.sleep(5)
     assert test_node.web3.net.peerCount > 0, 'Join the chain failed'
     assert test_node.block_number > 0, "Non-consensus node sync block failed, block height: {}".format(
         test_node.block_number)
     time.sleep(5)
     client = get_client_by_nodeid(test_node.node_id, all_clients)
     address, _ = client.economic.account.generate_account(
         client.node.web3, 10**18 * 10000000)
     result = client.staking.create_staking(0, address, address)
     assert_code(result, 301004)
     upload_platon(test_node, client.pip.cfg.PLATON_NEW_BIN)
     test_node.restart()
     result = client.staking.create_staking(0, address, address)
     assert_code(result, 0)
示例#6
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)
示例#7
0
    def test_UV_UPG_1_UV_UPG_2(self, new_genesis_env, clients_consensus, client_noconsensus):
        new_genesis_env.deploy_all()
        pip = clients_consensus[0].pip
        pip_test = client_noconsensus.pip
        address, _ = pip_test.economic.account.generate_account(pip_test.node.web3, 10**18 * 10000000)
        result = client_noconsensus.staking.create_staking(0, address, address, amount=10 ** 18 * 2000000,
                                                           transaction_cfg=pip_test.cfg.transaction_cfg)
        log.info('Node {} staking result : {}'.format(pip_test.node.node_mark, result))
        programversion = client_noconsensus.staking.get_version()
        assert_code(programversion, pip.cfg.version0)
        pip_test.economic.wait_settlement(pip_test.node)

        verifier_list = get_pledge_list(clients_consensus[0].ppos.getVerifierList)
        log.info('Get verifier list : {}'.format(verifier_list))
        assert pip_test.node.node_id in verifier_list

        submitvpandvote(clients_consensus, 5)
        upload_platon(pip_test.node, pip_test.cfg.PLATON_NEW_BIN)
        programversion = clients_consensus[0].staking.get_version()
        assert_code(programversion, pip.cfg.version0)
        proposalinfo = pip.get_effect_proposal_info_of_vote()
        log.info('Get version proposal information : {}'.format(proposalinfo))
        wait_block_number(pip.node, proposalinfo.get('EndVotingBlock') - 1)
        validator_list = get_pledge_list(clients_consensus[0].ppos.getValidatorList)
        wait_block_number(pip.node, proposalinfo.get('EndVotingBlock'))
        assert_code(pip.get_status_of_proposal(proposalinfo.get('ProposalID')), 4)
        validator_list = get_pledge_list(clients_consensus[0].ppos.getValidatorList)
        log.info('Validator list : {}'.format(validator_list))
        wait_block_number(pip.node, proposalinfo.get('ActiveBlock'))
        validator_list = get_pledge_list(clients_consensus[0].ppos.getValidatorList)
        log.info('Validator list : {}'.format(validator_list))
        assert pip_test.node.node_id not in validator_list
        assert_code(pip.get_status_of_proposal(proposalinfo.get('ProposalID')), 5)
        block_reward, staking_reward = pip_test.economic.get_current_year_reward(pip_test.node, verifier_num=5)
        pip.economic.wait_settlement(client_noconsensus.node)

        count = get_block_count_number(client_noconsensus.node, 320)
        validator_list = get_pledge_list(clients_consensus[0].ppos.getValidatorList)
        log.info('Validator list : {}'.format(validator_list))
        assert pip_test.node.node_id not in validator_list
        verifier_list = get_pledge_list(clients_consensus[0].ppos.getVerifierList)
        log.info('Get verifier list : {}'.format(verifier_list))
        assert pip_test.node.node_id not in verifier_list

        block_reward, staking_reward = pip.economic.get_current_year_reward(pip.node, 5)
        log.info(f'block_reward == {block_reward}, staking_reward == {staking_reward}')
        balance_before = pip.node.eth.getBalance(address, 2 * pip.economic.settlement_size - 1)
        log.info('Block number {} address balace {}'.format(2 * pip.economic.settlement_size - 1, balance_before))
        pip.economic.wait_consensus(pip.node)
        balance_after = pip.node.eth.getBalance(address, 2 * pip.economic.settlement_size)
        log.info('Block number {} address balace {}'.format(2 * pip.economic.settlement_size, balance_after))
        log.info('Staking reward : {}'.format(staking_reward))
        assert balance_after - balance_before == staking_reward
示例#8
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)
 def test_VE_AD_003(self, new_genesis_env, clients_consensus, all_clients):
     submitvpandvote(clients_consensus)
     proposalinfo = clients_consensus[
         0].pip.get_effect_proposal_info_of_vote()
     log.info('Get version proposal information : {}'.format(proposalinfo))
     wait_block_number(clients_consensus[0].node,
                       proposalinfo.get('ActiveBlock'))
     consensus_node = new_genesis_env.get_rand_node()
     test_node = new_genesis_env.get_a_normal_node()
     client = get_client_by_nodeid(test_node.node_id, all_clients)
     upload_platon(test_node, client.pip.cfg.PLATON_NEW_BIN)
     test_node.restart()
     test_node.admin.addPeer(consensus_node.enode)
     time.sleep(5)
     address, _ = client.economic.account.generate_account(
         client.node.web3, 10**18 * 10000000)
     result = client.staking.create_staking(0, address, address)
     assert_code(result, 0)
示例#10
0
def version_proposal_vote(pip, vote_option=None):
    proposalinfo = pip.get_effect_proposal_info_of_vote()
    log.info('Version proposalinfo: {}'.format(proposalinfo))
    if not proposalinfo:
        raise Exception('there is no voting version proposal')
    if proposalinfo.get('NewVersion') == pip.cfg.version5:
        upload_platon(pip.node, pip.cfg.PLATON_NEW_BIN)
        log.info('Replace the node {} version to {}'.format(
            pip.node.node_mark, pip.cfg.version5))
    elif proposalinfo.get('NewVersion') == pip.cfg.version8:
        upload_platon(pip.node, pip.cfg.PLATON_NEW_BIN8)
        log.info('Replace the node {} version to {}'.format(
            pip.node.node_mark, pip.cfg.version8))
    elif proposalinfo.get('NewVersion') == pip.cfg.version9:
        upload_platon(pip.node, pip.cfg.PLATON_NEW_BIN9)
        log.info('Replace the node {} version to {}'.format(
            pip.node.node_mark, pip.cfg.version9))
    else:
        raise Exception('The new version of the proposal is{}'.format(
            proposalinfo.get('NewVersion')))
    pip.node.restart()
    log.info('Restart the node {}'.format(pip.node.node_mark))
    if not vote_option:
        vote_option = pip.cfg.vote_option_yeas
    result = pip.vote(pip.node.node_id,
                      proposalinfo.get('ProposalID'),
                      vote_option,
                      pip.node.staking_address,
                      transaction_cfg=pip.cfg.transaction_cfg)
    log.info('The node {} vote result {}'.format(pip.node.node_mark, result))
    return result