What changed, and why it matters
This commit only adds new fuzz testing targets and updates build/CI configuration to run them. It does not change any production library code, so it cannot introduce a runtime security vulnerability in the released crate. It is a testing infrastructure change.
No security action required. Review the fuzz harness helper functions (bitcoin_fuzz::check_roundtrip and check_script_roundtrip) in the accompanying commit if assessing test coverage, but this commit itself is benign infrastructure.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit regenerates fuzz target manifests via fuzz/generate-files.sh. It adds 71 new encoding_roundtrip fuzz targets under fuzz/fuzz_targets/bitcoin/encoding_roundtrip/, registers them in fuzz/Cargo.toml, and lists them in .github/workflows/cron-daily-fuzz.yml. It also adds a [lib] section to fuzz/Cargo.toml. No source code in the bitcoin or p2p crates is modified.
Changed components
fuzz/Cargo.toml.github/workflows/cron-daily-fuzz.ymlfuzz/fuzz_targets/bitcoin/encoding_roundtrip/*Inspect captured patch +1384 / −0
diff --git a/.github/workflows/cron-daily-fuzz.yml b/.github/workflows/cron-daily-fuzz.yml
index 14ee7f4b..c874d232 100644
--- a/.github/workflows/cron-daily-fuzz.yml
+++ b/.github/workflows/cron-daily-fuzz.yml
@@ -29,6 +29,75 @@ jobs:
bitcoin_deserialize_script,
bitcoin_deserialize_transaction,
bitcoin_deserialize_witness,
+ bitcoin_encoding_roundtrip_absolute_lock_time,
+ bitcoin_encoding_roundtrip_amount,
+ bitcoin_encoding_roundtrip_block,
+ bitcoin_encoding_roundtrip_block_hash,
+ bitcoin_encoding_roundtrip_block_header,
+ bitcoin_encoding_roundtrip_block_height,
+ bitcoin_encoding_roundtrip_block_time,
+ bitcoin_encoding_roundtrip_block_version,
+ bitcoin_encoding_roundtrip_compact_target,
+ bitcoin_encoding_roundtrip_out_point,
+ bitcoin_encoding_roundtrip_p2p_address_addr_v1_message,
+ bitcoin_encoding_roundtrip_p2p_address_addr_v2,
+ bitcoin_encoding_roundtrip_p2p_address_addr_v2_message,
+ bitcoin_encoding_roundtrip_p2p_address_address,
+ bitcoin_encoding_roundtrip_p2p_bip152_block_transactions,
+ bitcoin_encoding_roundtrip_p2p_bip152_block_transactions_request,
+ bitcoin_encoding_roundtrip_p2p_bip152_header_and_short_ids,
+ bitcoin_encoding_roundtrip_p2p_bip152_prefilled_transaction,
+ bitcoin_encoding_roundtrip_p2p_bip152_short_id,
+ bitcoin_encoding_roundtrip_p2p_magic,
+ bitcoin_encoding_roundtrip_p2p_merkle_tree_merkle_block,
+ bitcoin_encoding_roundtrip_p2p_merkle_tree_partial_merkle_tree,
+ bitcoin_encoding_roundtrip_p2p_message_addr_payload,
+ bitcoin_encoding_roundtrip_p2p_message_addr_v2_payload,
+ bitcoin_encoding_roundtrip_p2p_message_blockdata_block_locator,
+ bitcoin_encoding_roundtrip_p2p_message_blockdata_get_blocks_message,
+ bitcoin_encoding_roundtrip_p2p_message_blockdata_get_headers_message,
+ bitcoin_encoding_roundtrip_p2p_message_blockdata_inventory,
+ bitcoin_encoding_roundtrip_p2p_message_bloom_bloom_flags,
+ bitcoin_encoding_roundtrip_p2p_message_bloom_filter_add,
+ bitcoin_encoding_roundtrip_p2p_message_bloom_filter_load,
+ bitcoin_encoding_roundtrip_p2p_message_command_string,
+ bitcoin_encoding_roundtrip_p2p_message_compact_blocks_send_cmpct,
+ bitcoin_encoding_roundtrip_p2p_message_fee_filter,
+ bitcoin_encoding_roundtrip_p2p_message_filter_c_f_checkpt,
+ bitcoin_encoding_roundtrip_p2p_message_filter_c_f_headers,
+ bitcoin_encoding_roundtrip_p2p_message_filter_c_filter,
+ bitcoin_encoding_roundtrip_p2p_message_filter_filter_hash,
+ bitcoin_encoding_roundtrip_p2p_message_filter_filter_header,
+ bitcoin_encoding_roundtrip_p2p_message_filter_get_c_f_checkpt,
+ bitcoin_encoding_roundtrip_p2p_message_filter_get_c_f_headers,
+ bitcoin_encoding_roundtrip_p2p_message_filter_get_c_filters,
+ bitcoin_encoding_roundtrip_p2p_message_headers_message,
+ bitcoin_encoding_roundtrip_p2p_message_inventory_payload,
+ bitcoin_encoding_roundtrip_p2p_message_network_alert,
+ bitcoin_encoding_roundtrip_p2p_message_network_header,
+ bitcoin_encoding_roundtrip_p2p_message_network_reject,
+ bitcoin_encoding_roundtrip_p2p_message_network_reject_reason,
+ bitcoin_encoding_roundtrip_p2p_message_network_user_agent,
+ bitcoin_encoding_roundtrip_p2p_message_network_version_message,
+ bitcoin_encoding_roundtrip_p2p_message_ping,
+ bitcoin_encoding_roundtrip_p2p_message_pong,
+ bitcoin_encoding_roundtrip_p2p_message_v1_message_header,
+ bitcoin_encoding_roundtrip_p2p_message_v1_network_message,
+ bitcoin_encoding_roundtrip_p2p_protocol_version,
+ bitcoin_encoding_roundtrip_p2p_service_flags,
+ bitcoin_encoding_roundtrip_redeem_script_buf,
+ bitcoin_encoding_roundtrip_script_pub_key_buf,
+ bitcoin_encoding_roundtrip_script_sig_buf,
+ bitcoin_encoding_roundtrip_sequence,
+ bitcoin_encoding_roundtrip_tap_script_buf,
+ bitcoin_encoding_roundtrip_transaction,
+ bitcoin_encoding_roundtrip_transaction_version,
+ bitcoin_encoding_roundtrip_tx_in,
+ bitcoin_encoding_roundtrip_tx_merkle_node,
+ bitcoin_encoding_roundtrip_tx_out,
+ bitcoin_encoding_roundtrip_witness,
+ bitcoin_encoding_roundtrip_witness_merkle_node,
+ bitcoin_encoding_roundtrip_witness_script_buf,
bitcoin_parse_address,
bitcoin_parse_outpoint,
bitcoin_script_bytes_to_asm_fmt,
diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml
index 236af561..e31805e9 100644
--- a/fuzz/Cargo.toml
+++ b/fuzz/Cargo.toml
@@ -30,6 +30,10 @@ unexpected_cfgs = { level = "deny", check-cfg = ['cfg(fuzzing)'] }
redundant_clone = "warn"
use_self = "warn"
+[lib]
+name = "bitcoin_fuzz"
+path = "src/lib.rs"
+
[package.metadata.rbmt.lint]
allowed_duplicates = [
"hex-conservative",
@@ -114,6 +118,489 @@ test = false
doc = false
bench = false
+[[bin]]
+name = "bitcoin_encoding_roundtrip_absolute_lock_time"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/absolute_lock_time.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_amount"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/amount.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_block"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/block.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_block_hash"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/block_hash.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_block_header"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/block_header.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_block_height"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/block_height.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_block_time"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/block_time.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_block_version"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/block_version.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_compact_target"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/compact_target.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_out_point"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/out_point.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_address_addr_v1_message"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_addr_v1_message.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_address_addr_v2"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_addr_v2.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_address_addr_v2_message"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_addr_v2_message.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_address_address"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_address.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_bip152_block_transactions"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_block_transactions.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_bip152_block_transactions_request"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_block_transactions_request.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_bip152_header_and_short_ids"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_header_and_short_ids.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_bip152_prefilled_transaction"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_prefilled_transaction.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_bip152_short_id"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_short_id.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_magic"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_magic.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_merkle_tree_merkle_block"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_merkle_tree_merkle_block.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_merkle_tree_partial_merkle_tree"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_merkle_tree_partial_merkle_tree.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_addr_payload"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_addr_payload.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_addr_v2_payload"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_addr_v2_payload.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_blockdata_block_locator"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_block_locator.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_blockdata_get_blocks_message"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_get_blocks_message.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_blockdata_get_headers_message"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_get_headers_message.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_blockdata_inventory"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_inventory.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_bloom_bloom_flags"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_bloom_bloom_flags.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_bloom_filter_add"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_bloom_filter_add.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_bloom_filter_load"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_bloom_filter_load.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_command_string"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_command_string.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_compact_blocks_send_cmpct"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_compact_blocks_send_cmpct.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_fee_filter"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_fee_filter.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_filter_c_f_checkpt"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_c_f_checkpt.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_filter_c_f_headers"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_c_f_headers.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_filter_c_filter"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_c_filter.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_filter_filter_hash"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_filter_hash.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_filter_filter_header"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_filter_header.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_filter_get_c_f_checkpt"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_get_c_f_checkpt.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_filter_get_c_f_headers"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_get_c_f_headers.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_filter_get_c_filters"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_get_c_filters.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_headers_message"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_headers_message.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_inventory_payload"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_inventory_payload.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_network_alert"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_alert.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_network_header"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_header.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_network_reject"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_reject.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_network_reject_reason"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_reject_reason.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_network_user_agent"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_user_agent.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_network_version_message"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_version_message.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_ping"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_ping.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_pong"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_pong.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_v1_message_header"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_v1_message_header.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_message_v1_network_message"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_v1_network_message.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_protocol_version"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_protocol_version.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_p2p_service_flags"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/p2p_service_flags.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_redeem_script_buf"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/redeem_script_buf.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_script_pub_key_buf"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/script_pub_key_buf.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_script_sig_buf"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/script_sig_buf.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_sequence"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/sequence.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_tap_script_buf"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/tap_script_buf.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_transaction"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/transaction.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_transaction_version"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/transaction_version.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_tx_in"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/tx_in.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_tx_merkle_node"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/tx_merkle_node.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_tx_out"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/tx_out.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_witness"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/witness.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_witness_merkle_node"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/witness_merkle_node.rs"
+test = false
+doc = false
+bench = false
+
+[[bin]]
+name = "bitcoin_encoding_roundtrip_witness_script_buf"
+path = "fuzz_targets/bitcoin/encoding_roundtrip/witness_script_buf.rs"
+test = false
+doc = false
+bench = false
+
[[bin]]
name = "bitcoin_parse_address"
path = "fuzz_targets/bitcoin/parse_address.rs"
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/absolute_lock_time.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/absolute_lock_time.rs
new file mode 100644
index 00000000..6ec856a5
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/absolute_lock_time.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::absolute::LockTime>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/amount.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/amount.rs
new file mode 100644
index 00000000..a34106f4
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/amount.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::Amount>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block.rs
new file mode 100644
index 00000000..c58e47d6
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::Block>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_hash.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_hash.rs
new file mode 100644
index 00000000..53ba46b9
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_hash.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::BlockHash>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_header.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_header.rs
new file mode 100644
index 00000000..55d4ad15
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_header.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::block::Header>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_height.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_height.rs
new file mode 100644
index 00000000..ce24ddda
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_height.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::BlockHeight>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_time.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_time.rs
new file mode 100644
index 00000000..14adf585
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_time.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::BlockTime>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_version.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_version.rs
new file mode 100644
index 00000000..797b1103
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/block_version.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::block::Version>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/compact_target.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/compact_target.rs
new file mode 100644
index 00000000..31c54b39
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/compact_target.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::CompactTarget>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/out_point.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/out_point.rs
new file mode 100644
index 00000000..d93ddbb1
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/out_point.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::OutPoint>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_addr_v1_message.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_addr_v1_message.rs
new file mode 100644
index 00000000..071a98f2
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_addr_v1_message.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::address::AddrV1Message>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_addr_v2.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_addr_v2.rs
new file mode 100644
index 00000000..8e6c0ee2
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_addr_v2.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::address::AddrV2>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_addr_v2_message.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_addr_v2_message.rs
new file mode 100644
index 00000000..3814954e
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_addr_v2_message.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::address::AddrV2Message>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_address.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_address.rs
new file mode 100644
index 00000000..cc971b97
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_address_address.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::address::Address>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_block_transactions.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_block_transactions.rs
new file mode 100644
index 00000000..41752f3f
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_block_transactions.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::bip152::BlockTransactions>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_block_transactions_request.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_block_transactions_request.rs
new file mode 100644
index 00000000..dd5be32e
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_block_transactions_request.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::bip152::BlockTransactionsRequest>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_header_and_short_ids.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_header_and_short_ids.rs
new file mode 100644
index 00000000..9837b98c
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_header_and_short_ids.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::bip152::HeaderAndShortIds>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_prefilled_transaction.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_prefilled_transaction.rs
new file mode 100644
index 00000000..4e751b24
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_prefilled_transaction.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::bip152::PrefilledTransaction>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_short_id.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_short_id.rs
new file mode 100644
index 00000000..b2645bce
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_bip152_short_id.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::bip152::ShortId>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_magic.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_magic.rs
new file mode 100644
index 00000000..5c7fd2fc
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_magic.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::Magic>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_merkle_tree_merkle_block.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_merkle_tree_merkle_block.rs
new file mode 100644
index 00000000..68240786
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_merkle_tree_merkle_block.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::merkle_tree::MerkleBlock>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_merkle_tree_partial_merkle_tree.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_merkle_tree_partial_merkle_tree.rs
new file mode 100644
index 00000000..2b4ca771
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_merkle_tree_partial_merkle_tree.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::merkle_tree::PartialMerkleTree>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_addr_payload.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_addr_payload.rs
new file mode 100644
index 00000000..c9729596
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_addr_payload.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message::AddrPayload>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_addr_v2_payload.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_addr_v2_payload.rs
new file mode 100644
index 00000000..de080d76
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_addr_v2_payload.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message::AddrV2Payload>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_block_locator.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_block_locator.rs
new file mode 100644
index 00000000..bd89bf18
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_block_locator.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_blockdata::BlockLocator>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_get_blocks_message.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_get_blocks_message.rs
new file mode 100644
index 00000000..66e43417
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_get_blocks_message.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_blockdata::GetBlocksMessage>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_get_headers_message.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_get_headers_message.rs
new file mode 100644
index 00000000..d9a6aaab
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_get_headers_message.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_blockdata::GetHeadersMessage>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_inventory.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_inventory.rs
new file mode 100644
index 00000000..9dea1f20
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_blockdata_inventory.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_blockdata::Inventory>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_bloom_bloom_flags.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_bloom_bloom_flags.rs
new file mode 100644
index 00000000..34fb1c12
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_bloom_bloom_flags.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_bloom::BloomFlags>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_bloom_filter_add.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_bloom_filter_add.rs
new file mode 100644
index 00000000..d09aff7b
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_bloom_filter_add.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_bloom::FilterAdd>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_bloom_filter_load.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_bloom_filter_load.rs
new file mode 100644
index 00000000..849aba8b
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_bloom_filter_load.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_bloom::FilterLoad>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_command_string.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_command_string.rs
new file mode 100644
index 00000000..2dd4e123
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_command_string.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message::CommandString>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_compact_blocks_send_cmpct.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_compact_blocks_send_cmpct.rs
new file mode 100644
index 00000000..be9c322b
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_compact_blocks_send_cmpct.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_compact_blocks::SendCmpct>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_fee_filter.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_fee_filter.rs
new file mode 100644
index 00000000..e9de4209
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_fee_filter.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message::FeeFilter>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_c_f_checkpt.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_c_f_checkpt.rs
new file mode 100644
index 00000000..1bd245e1
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_c_f_checkpt.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_filter::CFCheckpt>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_c_f_headers.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_c_f_headers.rs
new file mode 100644
index 00000000..f381f260
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_c_f_headers.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_filter::CFHeaders>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_c_filter.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_c_filter.rs
new file mode 100644
index 00000000..a5523ca9
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_c_filter.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_filter::CFilter>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_filter_hash.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_filter_hash.rs
new file mode 100644
index 00000000..9dcae36d
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_filter_hash.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_filter::FilterHash>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_filter_header.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_filter_header.rs
new file mode 100644
index 00000000..56264419
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_filter_header.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_filter::FilterHeader>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_get_c_f_checkpt.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_get_c_f_checkpt.rs
new file mode 100644
index 00000000..dabddadc
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_get_c_f_checkpt.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_filter::GetCFCheckpt>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_get_c_f_headers.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_get_c_f_headers.rs
new file mode 100644
index 00000000..d80f3522
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_get_c_f_headers.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_filter::GetCFHeaders>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_get_c_filters.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_get_c_filters.rs
new file mode 100644
index 00000000..6ac90a08
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_filter_get_c_filters.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_filter::GetCFilters>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_headers_message.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_headers_message.rs
new file mode 100644
index 00000000..53156569
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_headers_message.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message::HeadersMessage>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_inventory_payload.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_inventory_payload.rs
new file mode 100644
index 00000000..755bf796
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_inventory_payload.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message::InventoryPayload>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_alert.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_alert.rs
new file mode 100644
index 00000000..fe6515db
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_alert.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_network::Alert>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_header.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_header.rs
new file mode 100644
index 00000000..adb49abc
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_header.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message::NetworkHeader>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_reject.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_reject.rs
new file mode 100644
index 00000000..17e4251b
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_reject.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_network::Reject>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_reject_reason.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_reject_reason.rs
new file mode 100644
index 00000000..ac901608
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_reject_reason.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_network::RejectReason>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_user_agent.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_user_agent.rs
new file mode 100644
index 00000000..3e7e07dd
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_user_agent.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_network::UserAgent>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_version_message.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_version_message.rs
new file mode 100644
index 00000000..bf6d62bc
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_network_version_message.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message_network::VersionMessage>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_ping.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_ping.rs
new file mode 100644
index 00000000..2860ae7f
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_ping.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message::Ping>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_pong.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_pong.rs
new file mode 100644
index 00000000..73162c5a
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_pong.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message::Pong>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_v1_message_header.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_v1_message_header.rs
new file mode 100644
index 00000000..b8ad0810
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_v1_message_header.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message::V1MessageHeader>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_v1_network_message.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_v1_network_message.rs
new file mode 100644
index 00000000..00f61aea
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_message_v1_network_message.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::message::V1NetworkMessage>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_protocol_version.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_protocol_version.rs
new file mode 100644
index 00000000..f28b9f30
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_protocol_version.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::ProtocolVersion>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_service_flags.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_service_flags.rs
new file mode 100644
index 00000000..be017bff
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/p2p_service_flags.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<p2p::ServiceFlags>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/redeem_script_buf.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/redeem_script_buf.rs
new file mode 100644
index 00000000..3290d285
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/redeem_script_buf.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_script_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_script_roundtrip::<bitcoin::RedeemScriptBuf>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/script_pub_key_buf.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/script_pub_key_buf.rs
new file mode 100644
index 00000000..b0b2cc4c
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/script_pub_key_buf.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_script_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_script_roundtrip::<bitcoin::ScriptPubKeyBuf>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/script_sig_buf.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/script_sig_buf.rs
new file mode 100644
index 00000000..4b31e665
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/script_sig_buf.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_script_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_script_roundtrip::<bitcoin::ScriptSigBuf>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/sequence.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/sequence.rs
new file mode 100644
index 00000000..7f1b1e5d
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/sequence.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::Sequence>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/tap_script_buf.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/tap_script_buf.rs
new file mode 100644
index 00000000..44c1e718
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/tap_script_buf.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_script_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_script_roundtrip::<bitcoin::TapScriptBuf>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/transaction.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/transaction.rs
new file mode 100644
index 00000000..812b1d3d
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/transaction.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::Transaction>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/transaction_version.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/transaction_version.rs
new file mode 100644
index 00000000..d90dfb29
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/transaction_version.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::transaction::Version>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/tx_in.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/tx_in.rs
new file mode 100644
index 00000000..047d300a
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/tx_in.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::TxIn>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/tx_merkle_node.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/tx_merkle_node.rs
new file mode 100644
index 00000000..8679d78e
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/tx_merkle_node.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::TxMerkleNode>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/tx_out.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/tx_out.rs
new file mode 100644
index 00000000..29c197e9
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/tx_out.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::TxOut>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/witness.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/witness.rs
new file mode 100644
index 00000000..c225a79a
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/witness.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::Witness>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/witness_merkle_node.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/witness_merkle_node.rs
new file mode 100644
index 00000000..5655b7d9
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/witness_merkle_node.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_roundtrip::<bitcoin::WitnessMerkleNode>(data);
+});
diff --git a/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/witness_script_buf.rs b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/witness_script_buf.rs
new file mode 100644
index 00000000..3278dfa2
--- /dev/null
+++ b/fuzz/fuzz_targets/bitcoin/encoding_roundtrip/witness_script_buf.rs
@@ -0,0 +1,12 @@
+#![cfg_attr(fuzzing, no_main)]
+#![cfg_attr(not(fuzzing), allow(unused))]
+
+use bitcoin_fuzz::check_script_roundtrip;
+use libfuzzer_sys::fuzz_target;
+
+#[cfg(not(fuzzing))]
+fn main() {}
+
+fuzz_target!(|data: &[u8]| {
+ check_script_roundtrip::<bitcoin::WitnessScriptBuf>(data);
+});
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.