Просмотр исходного кода

darkfid/proto/protocol_sync: use actual mm pow data len limit to set max header length

skoupidi 6 месяцев назад
Родитель
Сommit
acfba5830b
2 измененных файлов с 13 добавлено и 10 удалено
  1. 2 2
      bin/darkfid/src/proto/protocol_sync.rs
  2. 11 8
      bin/darkfid/src/tests/metering.rs

+ 2 - 2
bin/darkfid/src/proto/protocol_sync.rs

@@ -107,7 +107,7 @@ pub struct HeaderSyncResponse {
 impl_p2p_message!(
     HeaderSyncResponse,
     "headersyncresponse",
-    11861, // We leave some headroom for merge mining data
+    72121, // We leave some headroom for merge mining data
     1,
     PROTOCOL_SYNC_METERING_CONFIGURATION
 );
@@ -221,7 +221,7 @@ pub struct ForkHeadersResponse {
 impl_p2p_message!(
     ForkHeadersResponse,
     "forkheadersresponse",
-    11861, // We leave some headroom for merge mining data
+    72121, // We leave some headroom for merge mining data
     1,
     PROTOCOL_SYNC_METERING_CONFIGURATION
 );

+ 11 - 8
bin/darkfid/src/tests/metering.rs

@@ -33,14 +33,17 @@ fn darkfid_protocols_metering() {
     const U32_LEN: usize = 4;
     const VARINT_LEN: usize = 1;
     const HEADER_HASH_LEN: usize = 32;
-    // Header = U8_LEN + HEADER_HASH_LEN + U32_LEN + U32_LEN + U64_LEN + (U8_LEN * 32) + STATE_HASH_LEN + ENUM_LEN =
-    // 1 + 32 + 4 + 4 + 8 + (1 * 32) + 32 + 1 = 53 + 32 + 32 + 1 = 118
-    const HEADER_LEN: usize = 114;
+    // MAX_POW_DATA_LEN = ENUM_LEN + MAX_MM_POW_DATA_LEN =
+    // 1 + (8 + 8 + 8 + 32 + 4) + 60 + 2 + 32 + 1030 + (200 + 8 + 8 + 1 + 1) + 1060 + 1030 =
+    // 1 + 60 + 60 + 2 + 32 + 1030 + 218 + 1060 + 1030 = 3493
+    // Header = U8_LEN + HEADER_HASH_LEN + U32_LEN + U32_LEN + U64_LEN + (U8_LEN * 32) + STATE_HASH_LEN + MAX_POW_DATA_LEN =
+    // 1 + 32 + 4 + 4 + 8 + (1 * 32) + 32 + 3493 = 49 + 32 + 32 + 3493 = 3606
+    const MAX_HEADER_LEN: usize = 3606;
 
     // Generate a dummy `Header`.
     // Its bytes vector length is constant.
     let header = Header::default();
-    assert_eq!(serialize(&header).len(), HEADER_LEN);
+    assert!(serialize(&header).len() <= MAX_HEADER_LEN);
 
     // Its hash bytes vector length is constant.
     let header_hash = header.hash();
@@ -103,8 +106,8 @@ fn darkfid_protocols_metering() {
     // Based on length size/type, this can add from 1(u8) to 8(u64) bytes.
     // Since `BATCH` is 20, its `VarInt` will be represented as a u8,
     // adding an extra byte.
-    // Length = (BATCH * HEADER_LEN) + VARINT_LEN = (20 * 114) + 1 = 2356 + 1 = 2357
-    assert_eq!(serialize(&header_sync_response).len(), (BATCH * HEADER_LEN) + VARINT_LEN);
+    // Length = (BATCH * MAX_HEADER_LEN) + VARINT_LEN = (20 * 3606) + 1 = 72120 + 1 = 72121
+    assert!(serialize(&header_sync_response).len() <= (BATCH * MAX_HEADER_LEN) + VARINT_LEN);
 
     // Protocol sync `SyncRequest` is limited by `BATCH` so it has a
     // constant max bytes length limit.
@@ -158,8 +161,8 @@ fn darkfid_protocols_metering() {
     // constant max bytes length limit.
     let fork_headers_response = ForkHeadersResponse { headers: vec![header; BATCH] };
     // Don't forget the extra byte from `Vec` length.
-    // Length = (BATCH * HEADER_LEN) + VARINT_LEN = (20 * 114) + 1 = 2356 + 1 = 2357
-    assert_eq!(serialize(&fork_headers_response).len(), (BATCH * HEADER_LEN) + VARINT_LEN);
+    // Length = (BATCH * MAX_HEADER_LEN) + VARINT_LEN = (20 * 3606) + 1 = 72120 + 1 = 72121
+    assert!(serialize(&fork_headers_response).len() <= (BATCH * MAX_HEADER_LEN) + VARINT_LEN);
 
     // Protocol sync `ForkProposalsRequest` is limited by `BATCH` so it has a
     // constant max bytes length limit.