def test_proposal_multiple_voting(self, verifiers, new_genesis_env):
     """
     @describe: 同一提案,节点处罚前已经投票,处罚完成后再次投票
     @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()
     # step1:
     pips = get_pips(verifiers)
     pip = pips[0]
     pip_id = version_proposal(pip, pip.cfg.version5, 20)
     upload_platon(pip.node, pip.cfg.PLATON_NEW_BIN)
     vote(pip, pip_id)
     # step2:停止节点,等待节点被零出块处罚
     start_block, end_block = make_0mb_slash(verifiers[0], verifiers[1])
     wait_block_number(pip.node, end_block)
     # step3:检查提案和投票信息是否正确
     assert_code(vote(pip, pip_id), 302027)
     vote_info = pip.get_accuverifiers_count(pip_id)
     assert vote_info[0] == 4  # all verifiers
     assert vote_info[1] == 1  # all yeas vote
 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
 def test_submit_declare_at_0mb_freezing(self, verifiers, new_genesis_env):
     """
     @describe: 节点零出块冻结期内,进行版本声明
     @step:
     - 1. 节点零出块被冻结处罚
     - 2. 冻结期内进行版本声明
     @expect:
     - 1. 节点被处罚冻结期内,可以进行版本声明
     - 2. 冻结期内,已发送版本声明,也不会被选举
     """
     # 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()
     # step1:提交版本升级提案
     pips = get_pips(verifiers)
     pip = pips[0]
     # setp2:使用其他节点,对提案进行投票,使提案通过
     upload_platon(pips[0].node, pips[0].cfg.PLATON_NEW_BIN)
     upload_platon(pips[1].node, pips[1].cfg.PLATON_NEW_BIN)
     upload_platon(pips[2].node, pips[2].cfg.PLATON_NEW_BIN)
     upload_platon(pips[3].node, pips[3].cfg.PLATON_NEW_BIN)
     pip_id = version_proposal(pip, pip.cfg.version5, 5)
     vote(pips[1], pip_id)
     vote(pips[2], pip_id)
     vote(pips[3], pip_id)
     # setp3: 在投票期内,构造节点零出块,并等待提案通过
     start_block, end_block = make_0mb_slash(verifiers[0], verifiers[1])
     wait_proposal_active(pip, pip_id)
     # step4:进行版本声明
     assert_code(version_declare(pip), 302023)
     # step5: 等待零出块冻结结束,进行版本声明
     wait_block_number(pip.node, end_block)
     assert_code(version_declare(pip), 0)
 def test_0mb_freeze_after_param_vote(self, verifiers, new_genesis_env):
     """
     @describe: 参数提案投票后,节点零出块冻结,投票有效,提案可正常生效
     @step:
     - 1. 提交参数提案并进行投票
     - 2. 停止节点,等待节点被零出块处罚
     - 3. 检查提案和投票信息是否正确
     @expect:
     - 1. 节点被处罚后,投票有效,累积验证人含被处罚节点
     - 2. 节点被处罚后,提案可正常生效
     - 3. 所有相关查询接口,返回提案信息正确
     """
     # init: 修改依赖参数的值,并重新部署环境
     genesis = to_genesis(new_genesis_env.genesis_config)
     genesis.economicModel.staking.unStakeFreezeDuration = 10
     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', '5')
     vote(pip, pip_id)
     # step2:停止节点,等待节点被零出块处罚
     make_0mb_slash(verifiers[0], verifiers[1])
     # step3:检查提案和投票信息是否正确
     pip = pips[1]
     vote_info = pip.get_accuverifiers_count(pip_id)
     assert vote_info[0] == 4  # all verifiers
     assert vote_info[1] == 1  # all yeas vote
示例#5
0
def test_CH_IN_015(global_test_env):
    """
    View economic model parameters, governance parameters, penalty parameters, and whether the reward parameters are correctly configured parameters
    """
    log.info("View economic model parameters, governance parameters, penalty parameters, and whether the reward parameters are correctly configured parameters")
    # economic_info = global_test_env.genesis_config['EconomicModel']
    if not global_test_env.running:
        global_test_env.deploy_all()
    genesis = to_genesis(global_test_env.genesis_config)
    w3_list = [one_node.web3 for one_node in global_test_env.consensus_node_list]
    for w3 in w3_list:
        info = w3.debug.economicConfig()
        assert info['common']['maxEpochMinutes'] == genesis.economicModel.common.maxEpochMinutes
        assert info['common']['maxConsensusVals'] == genesis.economicModel.common.maxConsensusVals
        assert info["common"]["additionalCycleTime"] == genesis.economicModel.common.additionalCycleTime

        assert info['staking']['stakeThreshold'] == genesis.economicModel.staking.stakeThreshold
        assert info['staking']['operatingThreshold'] == genesis.economicModel.staking.operatingThreshold
        assert info['staking']['maxValidators'] == genesis.economicModel.staking.maxValidators
        assert info['staking']['hesitateRatio'] == genesis.economicModel.staking.hesitateRatio
        assert info['staking']['unStakeFreezeDuration'] == genesis.economicModel.staking.unStakeFreezeDuration

        assert info['slashing']['slashFractionDuplicateSign'] == genesis.economicModel.slashing.slashFractionDuplicateSign
        assert info['slashing']['duplicateSignReportReward'] == genesis.economicModel.slashing.duplicateSignReportReward
        assert info['slashing']['slashBlocksReward'] == genesis.economicModel.slashing.slashBlocksReward
        assert info['slashing']['maxEvidenceAge'] == genesis.economicModel.slashing.maxEvidenceAge

        assert info['gov']['versionProposalVoteDurationSeconds'] == genesis.economicModel.gov.versionProposalVoteDurationSeconds
        assert info['gov']['versionProposalSupportRate'] == genesis.economicModel.gov.versionProposalSupportRate
        assert info['gov']['textProposalVoteDurationSeconds'] == genesis.economicModel.gov.textProposalVoteDurationSeconds
        assert info['gov']['textProposalVoteRate'] == genesis.economicModel.gov.textProposalVoteRate
        assert info['gov']['textProposalSupportRate'] == genesis.economicModel.gov.textProposalSupportRate
        assert info['gov']['cancelProposalVoteRate'] == genesis.economicModel.gov.cancelProposalVoteRate
        assert info['gov']['cancelProposalSupportRate'] == genesis.economicModel.gov.cancelProposalSupportRate
        assert info['gov']['paramProposalVoteDurationSeconds'] == genesis.economicModel.gov.paramProposalVoteDurationSeconds
        assert info['gov']['paramProposalVoteRate'] == genesis.economicModel.gov.paramProposalVoteRate
        assert info['gov']['paramProposalSupportRate'] == genesis.economicModel.gov.paramProposalSupportRate

        assert info['reward']['newBlockRate'] == genesis.economicModel.reward.newBlockRate
        assert info['reward']['platonFoundationYear'] == genesis.economicModel.reward.platONFoundationYear

        assert w3.toChecksumAddress(info['innerAcc']['platonFundAccount']) == w3.toChecksumAddress(genesis.economicModel.innerAcc.platonFundAccount)
        assert info['innerAcc']['platonFundBalance'] == genesis.economicModel.innerAcc.platonFundBalance
        assert w3.toChecksumAddress(info['innerAcc']['cdfAccount']) == w3.toChecksumAddress(genesis.economicModel.innerAcc.cdfAccount)
        assert info['innerAcc']['cdfBalance'] == genesis.economicModel.innerAcc.cdfBalance
 def test_modify_param_fail_of_0mb_freeze_duration(self, verifiers, new_genesis_env, value, code):
     """
     @describe: 参数提案修改‘zeroProduceFreezeDuration’的值-异常
     @step:
     - 1. 提交参数提案,修改‘zeroProduceFreezeDuration’的值为异常值
     - 2. 检查提案异常返回的code
     @expect:
     - 1. 提案返回错误码正确
     """
     # 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]
     assert_code(param_proposal(pip, 'slashing', 'zeroProduceFreezeDuration', value), code)
示例#7
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
示例#8
0
 def test_all_process_of_pip_after_slashed(self, verifiers,
                                           new_genesis_env):
     """
     @describe: 在处罚结束之后,执行pip所有流程
     @step:
     - 1. 节点在零出块处罚结束后发起提案
     - 2. 节点在零出块处罚结束后进行投票
     - 3. 节点在零出块处罚结束后进行版本声明
     @expect:
     - 1. pip流程未受到处罚影响
     """
     # 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()
     # step1: 构造零出块处罚,并在处罚结束后发起提案
     pips = get_pips(verifiers)
     pip = pips[0]
     # _, 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
     # pip.economic.wait_settlement(pip.node)
     # 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
     # step2: 构造零出块处罚,并在处罚结束后进行投票
     pip_id = version_proposal(pip, pip.cfg.version5, 10)
     _, end_block = make_0mb_slash(verifiers[1], verifiers[0])
     wait_block_number(pip.node, end_block)
     upload_platon(pips[1].node, pip.cfg.PLATON_NEW_BIN)
     upload_platon(pips[2].node, pip.cfg.PLATON_NEW_BIN)
     upload_platon(pips[3].node, pip.cfg.PLATON_NEW_BIN)
     assert_code(vote(pips[1], pip_id, pips[1].cfg.vote_option_yeas), 0)
     assert_code(vote(pips[2], pip_id, pips[2].cfg.vote_option_yeas), 0)
     assert_code(vote(pips[3], pip_id, pips[3].cfg.vote_option_yeas), 0)
     # step3: 在提案生效后进行版本声明
     wait_proposal_active(pip, pip_id)
     upload_platon(pip.node, pip.cfg.PLATON_NEW_BIN)
     assert_code(version_declare(pip), 0)