From bf3694d1387401f9d2eec4d542f224f5de8bc7f8 Mon Sep 17 00:00:00 2001 From: bruno-valante <140794260+bruno-valante@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:53:00 +0800 Subject: [PATCH] Update mine test process to avoid random bugs on low-performance devices (#184) --- node/miner/src/mine.rs | 4 ++++ tests/mine_test.py | 9 ++++++++- tests/mine_with_market_test.py | 8 +++++++- tests/test_framework/blockchain_node.py | 4 ++-- tests/test_framework/zg_node.py | 1 + 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/node/miner/src/mine.rs b/node/miner/src/mine.rs index 12ffe8f..9994a89 100644 --- a/node/miner/src/mine.rs +++ b/node/miner/src/mine.rs @@ -238,6 +238,10 @@ impl PoraService { return Err("too many mine shards"); } + if puzzle.context.flow_length <= U256::one() { + return Err("no data submitted"); + } + if self.mine_range.shard_config.num_shard as u64 > puzzle.context.flow_length.as_u64() { return Err("Not enough flow length to shard"); } diff --git a/tests/mine_test.py b/tests/mine_test.py index 5a41d87..19628b6 100755 --- a/tests/mine_test.py +++ b/tests/mine_test.py @@ -13,7 +13,7 @@ class MineTest(TestFramework): self.zgs_node_configs[0] = { "miner_key": GENESIS_PRIV_KEY, } - self.mine_period = int(40 / self.block_time) + self.mine_period = int(45 / self.block_time) self.launch_wait_seconds = 15 self.log.info("Contract Info: Est. block time %.2f, Mine period %d", self.block_time, self.mine_period) @@ -35,6 +35,11 @@ class MineTest(TestFramework): self.log.info("flow address: %s", self.contract.address()) self.log.info("mine address: %s", self.mine_contract.address()) + first_block = self.contract.first_block() + self.log.info("Current block number %d", int(blockchain.eth_blockNumber(), 16)) + self.log.info("Flow deployment block number %d, epoch 1 start %d", first_block, first_block + self.mine_period) + wait_until(lambda: self.contract.epoch() >= 1, timeout=180) + quality = int(2**256 / 100 / estimate_st_performance()) self.mine_contract.set_quality(quality) @@ -71,6 +76,8 @@ class MineTest(TestFramework): self.log.info("Wait for the third mine answer") wait_until(lambda: self.mine_contract.last_mined_epoch() == start_epoch + 3 and not self.mine_contract.can_submit(), timeout=180) + self.log.info("Current block number %d", int(blockchain.eth_blockNumber(), 16)) + if __name__ == "__main__": MineTest(blockchain_node_type=BlockChainNodeType.BSC).main() diff --git a/tests/mine_with_market_test.py b/tests/mine_with_market_test.py index 4f99cba..dbdea9f 100755 --- a/tests/mine_with_market_test.py +++ b/tests/mine_with_market_test.py @@ -21,7 +21,7 @@ class MineTest(TestFramework): "shard_position": "3 / 8", } self.enable_market = True - self.mine_period = int(45 / self.block_time) + self.mine_period = int(50 / self.block_time) self.launch_wait_seconds = 15 self.log.info("Contract Info: Est. block time %.2f, Mine period %d", self.block_time, self.mine_period) @@ -50,6 +50,10 @@ class MineTest(TestFramework): SECTORS_PER_PRICING = int(8 * ( 2 ** 30 ) / 256) + first_block = self.contract.first_block() + self.log.info("Current block number %d", int(blockchain.eth_blockNumber(), 16)) + self.log.info("Flow deployment block number %d, epoch 1 start %d, wait for epoch 1 start", first_block, first_block + self.mine_period) + wait_until(lambda: self.contract.epoch() >= 1, timeout=180) self.log.info("Submit the actual data chunk (256 MB)") self.submit_data(b"\x11", int(SECTORS_PER_PRICING / 32)) @@ -98,6 +102,8 @@ class MineTest(TestFramework): assert_greater_than(secondReward, 100 * firstReward / (start_epoch + 1)) + self.log.info("Current block number %d", int(blockchain.eth_blockNumber(), 16)) + if __name__ == "__main__": MineTest(blockchain_node_type=BlockChainNodeType.BSC).main() diff --git a/tests/test_framework/blockchain_node.py b/tests/test_framework/blockchain_node.py index 54b2c26..f08b293 100644 --- a/tests/test_framework/blockchain_node.py +++ b/tests/test_framework/blockchain_node.py @@ -30,9 +30,9 @@ class BlockChainNodeType(Enum): if self == BlockChainNodeType.Conflux: return 0.5 elif self == BlockChainNodeType.BSC: - return 25 / estimate_st_performance() + return 32 / estimate_st_performance() else: - return 3.0 + return 5.0 @unique class NodeType(Enum): diff --git a/tests/test_framework/zg_node.py b/tests/test_framework/zg_node.py index 89c2c41..458a263 100644 --- a/tests/test_framework/zg_node.py +++ b/tests/test_framework/zg_node.py @@ -78,6 +78,7 @@ class ZGNode(BlockchainNode): "--rpc.laddr", "tcp://127.0.0.1:%s" % arrange_port(ZGNODE_PORT_CATEGORY_RPC, index), # overwrite pprof port: 6060 "--rpc.pprof_laddr", "127.0.0.1:%s" % arrange_port(ZGNODE_PORT_CATEGORY_PPROF, index), + "--log_level", "debug" ] for k, v in updated_config.items():