From 7cc35d29b93bddfeed3a29f61a15bfec9668e933 Mon Sep 17 00:00:00 2001 From: zhangsoledad <787953403@qq.com> Date: Thu, 4 Aug 2022 11:19:43 +0800 Subject: [PATCH] chore: integration active mmr by default --- chain/src/tests/block_assembler.rs | 13 +- rpc/README.md | 2 +- rpc/src/module/miner.rs | 2 +- test/src/main.rs | 1 - test/src/specs/hardfork/v2021/extension.rs | 134 --------------------- test/src/specs/hardfork/v2021/mod.rs | 2 - test/src/specs/sync/block_sync.rs | 2 +- test/src/utils.rs | 4 +- tx-pool/src/block_assembler/mod.rs | 33 +++-- 9 files changed, 30 insertions(+), 163 deletions(-) delete mode 100644 test/src/specs/hardfork/v2021/extension.rs diff --git a/chain/src/tests/block_assembler.rs b/chain/src/tests/block_assembler.rs index 8edd22cd5f7..3dbb8894c63 100644 --- a/chain/src/tests/block_assembler.rs +++ b/chain/src/tests/block_assembler.rs @@ -173,7 +173,7 @@ fn test_block_template_message() { .unwrap() .unwrap(); - let _cellbase_witness = CellbaseWitness::from_slice( + let cellbase_witness = CellbaseWitness::from_slice( block_template .cellbase .data @@ -183,8 +183,15 @@ fn test_block_template_message() { .as_bytes(), ) .expect("should be valid CellbaseWitness slice"); - - // assert_eq!("TEST".as_bytes(), cellbase_witness.message().raw_data()); + let snapshot = shared.snapshot(); + let version = snapshot + .compute_versionbits(snapshot.tip_header()) + .unwrap() + .to_le_bytes(); + assert_eq!( + [version.as_slice(), b" ", "TEST".as_bytes()].concat(), + cellbase_witness.message().raw_data() + ); } #[test] diff --git a/rpc/README.md b/rpc/README.md index 2f394089c0a..c6cf11f9792 100644 --- a/rpc/README.md +++ b/rpc/README.md @@ -2197,7 +2197,7 @@ Response ], "version": "0x0", "witnesses": [ - "0x650000000c00000055000000490000001000000030000000310000001892ea40d82b53c678ff88312450bbb17e164d7a3e0a90941aa58839f56f8df20114000000b2e61ff569acf041b3c2c17724e2379c581eeac30c00000000000020206d657373616765" + "0x6a0000000c00000055000000490000001000000030000000310000001892ea40d82b53c678ff88312450bbb17e164d7a3e0a90941aa58839f56f8df20114000000b2e61ff569acf041b3c2c17724e2379c581eeac311000000000000202054455354206d657373616765" ] }, "hash": "0xbaf7e4db2fd002f19a597ca1a31dfe8cfe26ed8cebc91f52b75b16a7a5ec8bab" diff --git a/rpc/src/module/miner.rs b/rpc/src/module/miner.rs index a3ac4811ce5..ab7ec8b01ac 100644 --- a/rpc/src/module/miner.rs +++ b/rpc/src/module/miner.rs @@ -90,7 +90,7 @@ pub trait MinerRpc { /// ], /// "version": "0x0", /// "witnesses": [ - /// "0x650000000c00000055000000490000001000000030000000310000001892ea40d82b53c678ff88312450bbb17e164d7a3e0a90941aa58839f56f8df20114000000b2e61ff569acf041b3c2c17724e2379c581eeac30c00000000000020206d657373616765" + /// "0x6a0000000c00000055000000490000001000000030000000310000001892ea40d82b53c678ff88312450bbb17e164d7a3e0a90941aa58839f56f8df20114000000b2e61ff569acf041b3c2c17724e2379c581eeac311000000000000202054455354206d657373616765" /// ] /// }, /// "hash": "0xbaf7e4db2fd002f19a597ca1a31dfe8cfe26ed8cebc91f52b75b16a7a5ec8bab" diff --git a/test/src/main.rs b/test/src/main.rs index 626a700ba10..d5a8cb22d20 100644 --- a/test/src/main.rs +++ b/test/src/main.rs @@ -525,7 +525,6 @@ fn all_specs() -> Vec> { Box::new(CheckCellDeps), Box::new(CheckAbsoluteEpochSince), Box::new(CheckRelativeEpochSince), - Box::new(CheckBlockExtension), Box::new(CheckVmVersion), Box::new(CheckVmBExtension), ]; diff --git a/test/src/specs/hardfork/v2021/extension.rs b/test/src/specs/hardfork/v2021/extension.rs deleted file mode 100644 index f90ead9ab96..00000000000 --- a/test/src/specs/hardfork/v2021/extension.rs +++ /dev/null @@ -1,134 +0,0 @@ -use crate::{ - node::waiting_for_sync, - util::check::{assert_submit_block_fail, assert_submit_block_ok}, - utils::wait_until, -}; -use crate::{Node, Spec}; -use ckb_logger::{info, trace}; -use ckb_types::prelude::*; - -const GENESIS_EPOCH_LENGTH: u64 = 10; - -const ERROR_EMPTY_EXT: &str = "Invalid: Block(EmptyBlockExtension("; -const ERROR_MAX_LIMIT: &str = "Invalid: Block(ExceededMaximumBlockExtensionBytes("; - -pub struct CheckBlockExtension; - -impl Spec for CheckBlockExtension { - crate::setup!(num_nodes: 3); - - fn run(&self, nodes: &mut Vec) { - { - let node = &nodes[0]; - node.mine_until_out_bootstrap_period(); - { - info!("CKB v2021, empty extension field is failed (boundary)"); - test_extension_via_size(node, Some(0), Err(ERROR_EMPTY_EXT)); - } - { - info!("CKB v2021, overlength extension field is failed (boundary)"); - test_extension_via_size(node, Some(97), Err(ERROR_MAX_LIMIT)); - } - for size in &[1, 16, 32, 64, 96] { - info!( - "CKB v2021, {}-bytes extension field is passed (boundary)", - size - ); - test_extension_via_size(node, Some(*size), Ok(())); - } - { - info!("CKB v2021, no extension field is passed (boundary)"); - test_extension_via_size(node, None, Ok(())); - } - { - info!("CKB v2021, empty extension field is failed"); - test_extension_via_size(node, Some(0), Err(ERROR_EMPTY_EXT)); - } - { - info!("CKB v2021, overlength extension field is failed"); - test_extension_via_size(node, Some(97), Err(ERROR_MAX_LIMIT)); - } - for size in &[1, 16, 32, 64, 96] { - info!("CKB v2021, {}-bytes extension field is passed", size); - test_extension_via_size(node, Some(*size), Ok(())); - } - { - info!("CKB v2021, no extension field is passed"); - test_extension_via_size(node, None, Ok(())); - } - } - - { - info!("test sync blocks for two nodes"); - let node0 = &nodes[0]; - let node1 = &nodes[1]; - - let rpc_client0 = node0.rpc_client(); - let rpc_client1 = node1.rpc_client(); - - node1.connect(node0); - let ret = wait_until(30, || { - let number0 = rpc_client0.get_tip_block_number(); - let number1 = rpc_client1.get_tip_block_number(); - trace!("block number: node0: {}, node1: {}", number0, number1); - number0 == number1 - }); - assert!(ret, "node1 should get same tip header with node0"); - } - - { - info!("test reload data from store after restart the node"); - let node0 = &mut nodes[0]; - node0.stop(); - node0.start(); - } - - { - info!("test sync blocks for all nodes"); - let node0 = &nodes[0]; - let node1 = &nodes[1]; - let node2 = &nodes[2]; - - let rpc_client0 = node0.rpc_client(); - let rpc_client2 = node2.rpc_client(); - - node1.connect(node0); - node2.connect(node0); - let ret = wait_until(30, || { - let header0 = rpc_client0.get_tip_header(); - let header2 = rpc_client2.get_tip_header(); - header0 == header2 - }); - assert!(ret, "node2 should get same tip header with node0"); - - node2.mine(5); - - info!("test sync blocks"); - waiting_for_sync(nodes); - } - } - - fn modify_chain_spec(&self, spec: &mut ckb_chain_spec::ChainSpec) { - spec.params.permanent_difficulty_in_dummy = Some(true); - spec.params.genesis_epoch_length = Some(GENESIS_EPOCH_LENGTH); - if spec.params.hardfork.is_none() { - spec.params.hardfork = Some(Default::default()); - } - if let Some(mut switch) = spec.params.hardfork.as_mut() { - switch.rfc_0031 = Some(2); - } - } -} - -fn test_extension_via_size(node: &Node, size: Option, result: Result<(), &'static str>) { - let block = node - .new_block_builder(None, None, None) - .extension(size.map(|s| vec![0u8; s].pack())) - .build(); - if let Err(errmsg) = result { - assert_submit_block_fail(node, &block, errmsg); - } else { - assert_submit_block_ok(node, &block); - node.new_block_with_blocking(|template| template.number.value() != (block.number() + 1)); - } -} diff --git a/test/src/specs/hardfork/v2021/mod.rs b/test/src/specs/hardfork/v2021/mod.rs index 7e0514690d5..e80e4adc431 100644 --- a/test/src/specs/hardfork/v2021/mod.rs +++ b/test/src/specs/hardfork/v2021/mod.rs @@ -1,11 +1,9 @@ mod cell_deps; -mod extension; mod since; mod vm_b_extension; mod vm_version; pub use cell_deps::CheckCellDeps; -pub use extension::CheckBlockExtension; pub use since::{CheckAbsoluteEpochSince, CheckRelativeEpochSince}; pub use vm_b_extension::CheckVmBExtension; pub use vm_version::CheckVmVersion; diff --git a/test/src/specs/sync/block_sync.rs b/test/src/specs/sync/block_sync.rs index b9c6796936c..ab7e9c6980b 100644 --- a/test/src/specs/sync/block_sync.rs +++ b/test/src/specs/sync/block_sync.rs @@ -391,7 +391,7 @@ impl Spec for RequestUnverifiedBlocks { let mut received = Vec::new(); while let Ok((_, _, data)) = net.receive_timeout(target_node, Duration::from_secs(10)) { - let message = SyncMessage::from_slice(&data).unwrap(); + let message = SyncMessage::from_compatible_slice(&data).unwrap(); if let packed::SyncMessageUnionReader::SendBlock(reader) = message.as_reader().to_enum() { received.push(reader.block().calc_header_hash()); diff --git a/test/src/utils.rs b/test/src/utils.rs index 368771aca8d..7c8863ef1a0 100644 --- a/test/src/utils.rs +++ b/test/src/utils.rs @@ -330,9 +330,9 @@ pub fn find_available_port() -> u16 { } pub fn message_name(data: &Bytes) -> String { - if let Ok(message) = SyncMessage::from_slice(data) { + if let Ok(message) = SyncMessage::from_compatible_slice(data) { message.to_enum().item_name().to_string() - } else if let Ok(message) = RelayMessage::from_slice(data) { + } else if let Ok(message) = RelayMessage::from_compatible_slice(data) { message.to_enum().item_name().to_string() } else { panic!("unknown message item"); diff --git a/tx-pool/src/block_assembler/mod.rs b/tx-pool/src/block_assembler/mod.rs index 7f49bdd3173..4f1e48508da 100644 --- a/tx-pool/src/block_assembler/mod.rs +++ b/tx-pool/src/block_assembler/mod.rs @@ -144,7 +144,6 @@ impl BlockAssembler { let current_template = ¤t.template; let uncles = ¤t_template.uncles; - let extension = Self::build_extension(¤t.snapshot)?; let (proposals, txs, txs_size, basic_size) = { let tx_pool_reader = tx_pool.read().await; if current.snapshot.tip_hash() != tx_pool_reader.snapshot().tip_hash() { @@ -157,7 +156,7 @@ impl BlockAssembler { current_template.cellbase.data(), uncles, proposals.iter(), - extension.clone(), + current_template.extension.clone(), ); let txs_size_limit = max_block_bytes @@ -190,9 +189,6 @@ impl BlockAssembler { current.template.current_time, )) .dao(dao); - if let Some(data) = extension { - builder.extension(data); - } current.template = builder.build(); current.size.txs = txs_size; @@ -438,21 +434,22 @@ impl BlockAssembler { .build(); let tip = snapshot.tip_header(); - let message = if let Some(version) = snapshot.compute_versionbits(tip) { - [ - version.to_le_bytes().as_slice(), - b" ", - config.message.as_bytes(), - ] - .concat() - .pack() - } else { - config.message.as_bytes().pack() - }; + let mut message = vec![]; + if let Some(version) = snapshot.compute_versionbits(tip) { + message.extend_from_slice(&version.to_le_bytes()); + message.extend_from_slice(b" "); + } + if config.use_binary_version_as_message_prefix { + message.extend_from_slice(config.binary_version.as_bytes()); + } + if !config.message.is_empty() { + message.extend_from_slice(b" "); + message.extend_from_slice(config.message.as_bytes()); + } CellbaseWitness::new_builder() .lock(cellbase_lock) - .message(message) + .message(message.pack()) .build() } @@ -771,6 +768,7 @@ impl BlockTemplateBuilder { cycles_limit: template.cycles_limit, bytes_limit: template.bytes_limit, uncles_count_limit: template.uncles_count_limit, + extension: template.extension.clone(), // option uncles: template.uncles.clone(), transactions: template.transactions.clone(), @@ -779,7 +777,6 @@ impl BlockTemplateBuilder { work_id: None, dao: Some(template.dao.clone()), current_time: None, - extension: None, } }