From 4bb96c554c45ed6a655bb1ae3a329a93cb1f94a9 Mon Sep 17 00:00:00 2001 From: Florent Daigniere Date: Fri, 15 May 2026 11:02:47 +0200 Subject: [PATCH] save 512 bytes of RAM Instead of 64 bit fingerprints save 32 bit fingerprints We were at 128 / 2^64 we are now at 128 / 2^32 (1 in 33M) If we reduced it to 3 bytes (24 bits), we would have 1 in 131k. --- src/MeshCore.h | 2 +- src/helpers/SimpleMeshTables.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/MeshCore.h b/src/MeshCore.h index 2db1d4c3ec..af5c2efeed 100644 --- a/src/MeshCore.h +++ b/src/MeshCore.h @@ -3,7 +3,7 @@ #include #include -#define MAX_HASH_SIZE 8 +#define MAX_HASH_SIZE 4 #define PUB_KEY_SIZE 32 #define PRV_KEY_SIZE 64 #define SEED_SIZE 32 diff --git a/src/helpers/SimpleMeshTables.h b/src/helpers/SimpleMeshTables.h index 2f8af52af1..1ddba94064 100644 --- a/src/helpers/SimpleMeshTables.h +++ b/src/helpers/SimpleMeshTables.h @@ -12,7 +12,7 @@ class SimpleMeshTables : public mesh::MeshTables { uint8_t _hashes[MAX_PACKET_HASHES*MAX_HASH_SIZE]; int _next_idx; - uint32_t _acks[MAX_PACKET_ACKS]; + uint8_t _acks[MAX_PACKET_ACKS*MAX_HASH_SIZE]; int _next_ack_idx; uint32_t _direct_dups, _flood_dups; @@ -42,8 +42,8 @@ class SimpleMeshTables : public mesh::MeshTables { bool hasSeen(const mesh::Packet* packet) override { if (packet->getPayloadType() == PAYLOAD_TYPE_ACK) { - uint32_t ack; - memcpy(&ack, packet->payload, 4); + uint8_t ack; + memcpy(&ack, packet->payload, MAX_HASH_SIZE); for (int i = 0; i < MAX_PACKET_ACKS; i++) { if (ack == _acks[i]) { if (packet->isRouteDirect()) { @@ -82,8 +82,8 @@ class SimpleMeshTables : public mesh::MeshTables { void clear(const mesh::Packet* packet) override { if (packet->getPayloadType() == PAYLOAD_TYPE_ACK) { - uint32_t ack; - memcpy(&ack, packet->payload, 4); + uint8_t ack; + memcpy(&ack, packet->payload, MAX_HASH_SIZE); for (int i = 0; i < MAX_PACKET_ACKS; i++) { if (ack == _acks[i]) { _acks[i] = 0;