Exemplo n.º 1
0
def make_0mb_slash(slash_client, check_client):
    """
    构造零出块处罚场景
    """
    slash_node = slash_client.node
    print(
        f'slash_client: {slash_client.node.node_mark}, check_client: {check_client.node.node_mark}'
    )
    pledge_amount, block_reward, slash_blocks = get_out_block_penalty_parameters(
        slash_client, slash_node, 'Released')
    log.info(
        f'slashing param : pledge_amount ({pledge_amount}), block_reward ({block_reward}), slash_blocks ({slash_blocks})'
    )
    log.info("make zero produce block")
    start_num, end_num = verify_low_block_rate_penalty(
        slash_client, check_client, block_reward, slash_blocks, pledge_amount,
        'Released')
    log.info('check Verifier Lists')
    assert check_node_in_list(slash_node.node_id,
                              check_client.ppos.getVerifierList) is False
    assert check_node_in_list(slash_node.node_id,
                              check_client.ppos.getValidatorList) is False
    slash_client.node.start()
    time.sleep(3)
    return start_num, end_num
Exemplo n.º 2
0
def test_PIP_PVF_004(client_con_list_obj, client_new_node_obj_list, reset_environment):
    """
    治理修改低0出块率扣除验证人自有质押金块数成功扣除区块奖励块数60100-自由金额质押
    :param client_con_list_obj:
    :param reset_environment:
    :return:
    """
    # get pledge amount1 and block reward
    pledge_amount1, block_reward, slash_blocks1 = information_before_slash_blocks(client_con_list_obj[0])
    # create Parametric proposal
    param_governance_verify(client_con_list_obj[0], 'slashing', 'slashBlocksReward', '60100')
    log.info("Current block height: {}".format(client_con_list_obj[0].node.eth.blockNumber))
    # Get governable parameters again
    slash_blocks2 = get_governable_parameter_value(client_con_list_obj[0], 'slashBlocksReward')
    assert slash_blocks2 == '60100', "ErrMsg:Change parameters {}".format(slash_blocks2)
    # create account
    address, _ = client_con_list_obj[0].economic.account.generate_account(client_con_list_obj[0].node.web3,
                                                                          client_con_list_obj[
                                                                              0].economic.create_staking_limit * 2)
    # create staking
    result = client_new_node_obj_list[0].staking.create_staking(0, address, address)
    assert_code(result, 0)
    # wait settlement block
    client_new_node_obj_list[0].economic.wait_settlement_blocknum(client_new_node_obj_list[0].node)
    for i in range(4):
        result = check_node_in_list(client_con_list_obj[0].node.node_id, client_con_list_obj[0].ppos.getValidatorList)
        log.info("Current node in consensus list status:{}".format(result))
        if result:
            # Verify changed parameters
            Verify_changed_parameters(client_con_list_obj, pledge_amount1, block_reward, slash_blocks2)
            break
        else:
            # wait consensus block
            client_con_list_obj[0].economic.wait_consensus_blocknum(client_con_list_obj[0].node)
Exemplo n.º 3
0
def test_AL_NBI_015(client_new_node_obj):
    """
    退回质押金并处于锁定期
    :param client_new_node_obj:
    :return:
    """
    # create pledge node
    address, benifit_address = create_pledge_node(client_new_node_obj, 1.5)
    # wait settlement block
    client_new_node_obj.economic.wait_settlement_blocknum(client_new_node_obj.node)
    # view account amount
    benifit_balance = query_ccount_amount(client_new_node_obj, benifit_address)
    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:
            # withdrew of pledge
            result = client_new_node_obj.staking.withdrew_staking(address)
            assert_code(result, 0)
            log.info("Current settlement cycle verifier list:{}".format(client_new_node_obj.ppos.getVerifierList()))
            for i in range(40):
                client_new_node_obj.economic.account.sendTransaction(client_new_node_obj.node.web3, '',
                                                                     client_new_node_obj.economic.account.account_with_money[
                                                                         'address'], address,
                                                                     client_new_node_obj.node.web3.platon.gasPrice,
                                                                     21000, 100)
                time.sleep(1)
            # view account amount again
            benifit_balance1 = query_ccount_amount(client_new_node_obj, benifit_address)
            assert benifit_balance1 > benifit_balance, "ErrMsg: {} > {}".format(benifit_balance1, benifit_balance)
            break
        else:
            # wait consensus block
            client_new_node_obj.economic.wait_consensus_blocknum(client_new_node_obj.node)
Exemplo n.º 4
0
def assert_benifit_reward(client_new_node_obj, benifit_address, address):
    """
    assert Amount of income address
    :param client_new_node_obj:
    :param benifit_address:
    :param address:
    :return:
    """
    # view account amount
    benifit_balance = client_new_node_obj.node.eth.getBalance(benifit_address)
    log.info("benifit_balance: {}".format(benifit_balance))
    # wait settlement block
    client_new_node_obj.economic.wait_settlement_blocknum(client_new_node_obj.node)
    # view block_reward
    block_reward, staking_reward = client_new_node_obj.economic.get_current_year_reward(
        client_new_node_obj.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 benifit reward
            blocknumber = view_benifit_reward(client_new_node_obj, address)
            # view account amount again
            benifit_balance1 = client_new_node_obj.node.eth.getBalance(benifit_address)
            log.info("benifit_balance: {}".format(benifit_balance1))
            assert benifit_balance + staking_reward + blocknumber * Decimal(
                str(block_reward)) - benifit_balance1 < client_new_node_obj.node.web3.toWei(1,
                                                                                            'ether'), "ErrMsg:benifit_balance: {}".format(
                benifit_balance1)
            break
        else:
            # wait consensus block
            client_new_node_obj.economic.wait_consensus_blocknum(client_new_node_obj.node)
Exemplo n.º 5
0
 def test_modify_param_of_0mb_freeze_duration(self, verifiers, new_genesis_env, value):
     """
     @describe: 参数提案修改‘zeroProduceFreezeDuration’的值-正常
     @step:
     - 1. 提交参数提案,修改‘zeroProduceFreezeDuration’的值为正常值
     - 2. 检查参数生效值和效果
     @expect:
     - 1. 提案生效后查询该参数,返回正确
     - 2. 参数在链上生效,影响零出块冻结持续时长
     """
     # init: 修改依赖参数的值,并重新部署环境
     genesis = to_genesis(new_genesis_env.genesis_config)
     genesis.economicModel.staking.unStakeFreezeDuration = 4
     genesis.economicModel.slashing.zeroProduceFreezeDuration = 2
     genesis.economicModel.slashing.slashBlocksReward = 0
     new_genesis_env.set_genesis(genesis.to_dict())
     new_genesis_env.deploy_all()
     # step1: 发起参数提案,投票使提案生效
     pips = get_pips(verifiers)
     pip = pips[0]
     pip_id = param_proposal(pip, 'slashing', 'zeroProduceFreezeDuration', value)
     votes(pip_id, pips, [1, 1, 1, 1])
     wait_proposal_active(pip, pip_id)
     # step2: 检查参数生效值和效果
     res = pip.pip.getGovernParamValue('slashing', 'zeroProduceFreezeDuration')
     assert res['Ret'] == value
     start_block, end_block = make_0mb_slash(verifiers[0], verifiers[1])
     wait_block_number(pip.node, end_block)
     assert check_node_in_list(pip.node.node_id, pip.node.ppos.getCandidateList) is True
     node_info = pip.node.ppos.getCandidateInfo(pip.node.node_id)
     assert node_info['Ret']['Status'] == 0
Exemplo n.º 6
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)
Exemplo n.º 7
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 test_PIP_PVF_004(client_consensus, clients_noconsensus, reset_environment):
    """
    治理修改低0出块率扣除验证人自有质押金块数成功扣除区块奖励块数49999-自由金额质押
    :param client_consensus:
    :param clients_noconsensus:
    :param reset_environment:
    :return:
    """
    consensus_client = client_consensus
    log.info("Current connection consensus node".format(
        consensus_client.node.node_mark))
    first_index = 0
    first_client = clients_noconsensus[first_index]
    log.info("Current connection non-consensus node:{}".format(
        first_client.node.node_mark))
    economic = consensus_client.economic
    node = consensus_client.node
    change_parameter_value = '49999'
    # get pledge amount1 and block reward
    consensus_pledge_amount, block_reward, first_slash_blocks = information_before_slash_blocks(
        consensus_client)
    # create Parametric proposal
    param_governance_verify(consensus_client, 'slashing', 'slashBlocksReward',
                            change_parameter_value)
    log.info("Current block height: {}".format(node.eth.blockNumber))
    # Get governable parameters again
    second_slash_blocks = get_governable_parameter_value(
        consensus_client, 'slashBlocksReward')
    assert second_slash_blocks == change_parameter_value, "ErrMsg:Change parameters {}".format(
        second_slash_blocks)
    # create account
    address, _ = economic.account.generate_account(
        node.web3, von_amount(economic.create_staking_limit, 2))
    # create staking
    result = first_client.staking.create_staking(0, address, address)
    assert_code(result, 0)
    # wait settlement block
    economic.wait_settlement_blocknum(node)
    candidate_info = consensus_client.ppos.getCandidateInfo(
        first_client.node.node_id)
    first_pledge_amount = candidate_info['Ret']['Released']
    log.info("Current pledge node amount:{}".format(first_pledge_amount))
    for i in range(4):
        result = check_node_in_list(node.node_id,
                                    consensus_client.ppos.getValidatorList)
        log.info("Current node in consensus list status:{}".format(result))
        if result:
            # Verify changed parameters
            verify_changed_parameters(clients_noconsensus, first_pledge_amount,
                                      block_reward, second_slash_blocks)
            break
        else:
            # wait consensus block
            economic.wait_consensus_blocknum(node)
Exemplo n.º 9
0
 def test_all_process_of_pip_after_slashed(self, verifiers,
                                           new_genesis_env):
     """
     @describe: 节点投票后被处罚,升级提案生效后,节点投票时声明的版本被回退
     @issues: 1666
     @step:
     - 1. 节点发起升级提案
     - 2. 节点进行投票后,被零出块处罚,不解质押
     - 3. 提案生效后,节点解冻结
     @expect:
     - 1. 节点解冻结后,可被选入验证人
     """
     # init: 修改依赖参数的值,并重新部署环境
     genesis = to_genesis(new_genesis_env.genesis_config)
     genesis.economicModel.slashing.slashBlocksReward = 0
     new_genesis_env.set_genesis(genesis.to_dict())
     new_genesis_env.deploy_all()
     pips = get_pips(verifiers)
     pip = pips[0]
     # step1: 发起升级提案,并进行投票
     pip_id = version_proposal(pip, pip.cfg.version5, 10)
     for pip in pips[:3]:
         upload_platon(pip.node, pip.cfg.PLATON_NEW_BIN)
         assert_code(vote(pip, pip_id, pip.cfg.vote_option_yeas), 0)
     # step2: 构造零出块处罚,等待提案生效,并且处罚冻结期结束
     start_block, end_block = make_0mb_slash(verifiers[1], verifiers[0])
     assert start_block < pip.pip.getProposal(
         pip_id)['Ret']['EndVotingBlock']
     vote_info = pip.get_accuverifiers_count(pip_id)
     assert vote_info[0] == 4  # all verifiers
     assert vote_info[1] == 3  # all yeas vote
     wait_proposal_active(pip, pip_id)
     wait_block_number(pip.node, end_block)
     # step3: 检查提案生效后,检查节点是否被选举
     pip.economic.wait_settlement(pip.node)
     assert check_node_in_list(pip.node.node_id,
                               pip.node.ppos.getCandidateList) is True
     assert check_node_in_list(pip.node.node_id,
                               pip.node.ppos.getValidatorList) is True
     assert check_node_in_list(pip.node.node_id,
                               pip.node.ppos.getVerifierList) is True
Exemplo n.º 10
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)
Exemplo n.º 11
0
def no_consensus_node_pledge_award_assertion(client_new_node_obj, benifit_address, from_address):
    """
    非内置节点质押奖励断言
    :param client_new_node_obj:
    :param benifit_address:
    :param from_address:
    :return:
    """
    CandidateInfo = client_new_node_obj.ppos.getCandidateInfo(client_new_node_obj.node.node_id)
    log.info("Pledgor node information:{}".format(CandidateInfo))
    balance = client_new_node_obj.node.eth.getBalance(benifit_address)
    log.info("benifit address:{} amount: {}".format(benifit_address, balance))

    # wait settlement block
    client_new_node_obj.economic.wait_settlement_blocknum(client_new_node_obj.node)
    time.sleep(5)
    VerifierList = client_new_node_obj.ppos.getVerifierList()
    log.info("Current settlement cycle verifier list:{}".format(VerifierList))
    ValidatorList = client_new_node_obj.ppos.getValidatorList()
    log.info("Current consensus cycle verifier list:{}".format(ValidatorList))
    block_reward, staking_reward = client_new_node_obj.economic.get_current_year_reward(client_new_node_obj.node)
    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:
            # wait consensus block
            client_new_node_obj.economic.wait_consensus_blocknum(client_new_node_obj.node)
            # Application for withdrew staking
            result = client_new_node_obj.staking.withdrew_staking(from_address)
            assert_code(result, 0)
            incentive_pool_balance1 = client_new_node_obj.node.eth.getBalance(EconomicConfig.INCENTIVEPOOL_ADDRESS)
            log.info("incentive pool amount:{}".format(incentive_pool_balance1))
            # wait settlement block
            client_new_node_obj.economic.wait_settlement_blocknum(client_new_node_obj.node)
            # Count the number of blocks out of pledge node
            blocknumber = client_new_node_obj.economic.get_block_count_number(client_new_node_obj.node, 5)
            log.info("blocknumber: {}".format(blocknumber))
            balance1 = client_new_node_obj.node.eth.getBalance(benifit_address)
            log.info("benifit address:{} amount:{}".format(benifit_address, balance1))

            # Verify block rewards
            log.info("Expected bonus:{}".format(Decimal(str(block_reward)) * blocknumber))
            assert balance + Decimal(str(block_reward)) * blocknumber - balance1 < client_new_node_obj.node.web3.toWei(
                1, 'ether'), "ErrMsg:benifit address:{} amount:{}".format(
                benifit_address, balance1)
            break
        else:
            # wait consensus block
            client_new_node_obj.economic.wait_consensus_blocknum(client_new_node_obj.node)
Exemplo n.º 12
0
def test_AL_NBI_014(client_new_node_obj):
    """
    修改节点质押收益地址查看收益变更(正在出块中)
    :param client_new_node_obj:
    :return:
    """
    # create pledge node
    address, benifit_address = create_pledge_node(client_new_node_obj, 1.4)
    # wait settlement block
    client_new_node_obj.economic.wait_settlement_blocknum(client_new_node_obj.node)
    # view block_reward
    block_reward, staking_reward = client_new_node_obj.economic.get_current_year_reward(
        client_new_node_obj.node)
    log.info("block_reward: {} staking_reward: {}".format(block_reward, staking_reward))
    # view benifit_address amount again
    benifit_balance = query_ccount_amount(client_new_node_obj, benifit_address)
    # change benifit address
    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:
            current_block = client_new_node_obj.node.eth.blockNumber
            log.info("Current block:{}".format(current_block))
            for i in range(40):
                nodeid = get_pub_key(client_new_node_obj.node.url, current_block)
                current_block = client_new_node_obj.node.eth.blockNumber
                log.info("当前块高:{}".format(current_block))
                time.sleep(3)
                if nodeid == client_new_node_obj.node.node_id:
                    break
            # create account
            benifit_address1, _ = client_new_node_obj.economic.account.generate_account(client_new_node_obj.node.web3, 0)
            # change benifit address
            result = client_new_node_obj.staking.edit_candidate(address, benifit_address1)
            assert_code(result, 0)
            # view benifit reward
            blocknumber = view_benifit_reward(client_new_node_obj, address)

            # view benifit_address1 amount
            benifit_balance1 = query_ccount_amount(client_new_node_obj, benifit_address1)
            assert benifit_balance + benifit_balance1 == int(Decimal(str(
                block_reward)) * blocknumber) + staking_reward, "ErrMsg:benifit_balance + benifit_balance1: {}".format(
                benifit_balance + benifit_balance1)
Exemplo n.º 13
0
def test_AL_NBI_017(client_new_node_obj_list):
    """
    0出块率剔除验证人列表
    :param client_new_node_obj_list:
    :return:
    """
    client_new_node_obj_list[0].economic.env.deploy_all()
    # create pledge node
    address, benifit_address = create_pledge_node(client_new_node_obj_list[0], 1.6)
    # wait settlement block
    client_new_node_obj_list[0].economic.wait_settlement_blocknum(client_new_node_obj_list[0].node)
    log.info("Current settlement cycle verifier list:{}".format(client_new_node_obj_list[0].ppos.getVerifierList()))
    # view block_reward
    block_reward, staking_reward = client_new_node_obj_list[0].economic.get_current_year_reward(
        client_new_node_obj_list[0].node)
    log.info("block_reward: {} staking_reward: {}".format(block_reward, staking_reward))
    # view account amount
    benifit_balance = query_ccount_amount(client_new_node_obj_list[0], benifit_address)
    for i in range(4):
        result = check_node_in_list(client_new_node_obj_list[0].node.node_id, client_new_node_obj_list[0].ppos.getValidatorList)
        log.info("Current node in consensus list status:{}".format(result))
        if result:
            # stop node
            client_new_node_obj_list[0].node.stop()
            log.info("Current settlement cycle verifier list:{}".format(client_new_node_obj_list[1].ppos.getVerifierList()))
            # wait settlement block
            client_new_node_obj_list[1].economic.wait_settlement_blocknum(client_new_node_obj_list[1].node)
            # view account amount again
            benifit_balance1 = query_ccount_amount(client_new_node_obj_list[1], benifit_address)
            # count the number of blocks
            blocknumber = client_new_node_obj_list[1].economic.get_block_count_number(client_new_node_obj_list[1].node, 5)
            log.info("blocknumber: {}".format(blocknumber))
            assert benifit_balance1 == benifit_balance + int(
                Decimal(str(block_reward)) * blocknumber), "ErrMsg:benifit_balance1:{}".format(benifit_balance1)
            break
        else:
            # wait consensus block
            client_new_node_obj_list[0].economic.wait_consensus_blocknum(client_new_node_obj_list[0].node)
Exemplo n.º 14
0
def test_AL_NBI_007_to_009(client_new_node_obj):
    """
    AL_NBI_007:非内置验证人Staking奖励(验证人)
    AL_NBI_008:非内置验证人出块奖励(验证人)
    AL_NBI_009:非内置验证人手续费奖励(验证人)
    :param client_new_node_obj:
    :return:
    """
    # create pledge node
    address, benifit_address = create_pledge_node(client_new_node_obj, 1.1)
    # view account amount
    benifit_balance = client_new_node_obj.node.eth.getBalance(benifit_address)
    log.info("benifit_balance: {}".format(benifit_balance))
    # wait settlement block
    client_new_node_obj.economic.wait_settlement_blocknum(client_new_node_obj.node)
    # view block_reward
    block_reward, staking_reward = client_new_node_obj.economic.get_current_year_reward(
        client_new_node_obj.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 not result:
            # view benifit reward
            blocknumber = view_benifit_reward(client_new_node_obj, address)
            # view account amount again
            benifit_balance1 = client_new_node_obj.node.eth.getBalance(benifit_address)
            log.info("benifit_balance: {}".format(benifit_balance1))
            assert benifit_balance + staking_reward + blocknumber * Decimal(
                str(block_reward)) - benifit_balance1 < client_new_node_obj.node.web3.toWei(1,
                                                                                            'ether'), "ErrMsg:benifit_balance: {}".format(
                benifit_balance1)
            break
        else:
            # wait consensus block
            client_new_node_obj.economic.wait_consensus_blocknum(client_new_node_obj.node)