diff --git a/dap-sdk b/dap-sdk
index e96283ddc24d41a307badd6365d82cf524685f79..a70e9212ad7f25ec8f1737c87fab6eaabc35c0c7 160000
--- a/dap-sdk
+++ b/dap-sdk
@@ -1 +1 @@
-Subproject commit e96283ddc24d41a307badd6365d82cf524685f79
+Subproject commit a70e9212ad7f25ec8f1737c87fab6eaabc35c0c7
diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
index 923b4109500f7cb0d533ec08a772e98f127607b3..4a195c08806a81215a1220b125f358c2994f45f4 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -456,10 +456,26 @@ enum dap_chain_poa_round_filter_stage {
     DAP_CHAIN_POA_ROUND_FILTER_STAGE_START,
     DAP_CHAIN_POA_ROUND_FILTER_STAGE_SIGNS,
     DAP_CHAIN_POA_ROUND_FILTER_STAGE_TS,
-    DAP_CHAIN_POA_ROUND_FILTER_STAGE_HASH,
+    DAP_CHAIN_POA_ROUND_FILTER_STAGE_MEM,
     DAP_CHAIN_POA_ROUND_FILTER_STAGE_MAX
 };
 
+#define DAP_CHAIN_POA_ROUND_FILTER_MEM_SIZE 1024
+
+static void s_event_get_unique_mem_region(dap_chain_cs_dag_event_round_item_t *a_round_item, byte_t *a_mem_region)
+{
+    memset(a_mem_region, 0, DAP_CHAIN_POA_ROUND_FILTER_MEM_SIZE);
+    dap_chain_cs_dag_event_t *l_event = (dap_chain_cs_dag_event_t *)a_round_item->event_n_signs;
+    for (int n = 0; n < l_event->header.signs_count; n++) {
+        dap_sign_t *l_sign = dap_chain_cs_dag_event_get_sign(l_event, a_round_item->event_size, n);
+        size_t l_sign_size = 0;
+        byte_t *l_sign_mem = dap_sign_get_sign(l_sign, &l_sign_size);
+        size_t l_mem_size = MIN(l_sign_size, DAP_CHAIN_POA_ROUND_FILTER_MEM_SIZE);
+        for (size_t i = 0; i < l_mem_size; i++)
+            a_mem_region[i] ^= l_sign_mem[i];
+    }
+}
+
 static dap_chain_cs_dag_event_round_item_t *s_round_event_choose_dup(dap_list_t *a_dups, uint16_t a_max_signs_counts)
 {
     dap_chain_cs_dag_event_round_item_t *l_round_item;
@@ -468,7 +484,8 @@ static dap_chain_cs_dag_event_round_item_t *s_round_event_choose_dup(dap_list_t
         return NULL;
     dap_list_t *l_dups = dap_list_copy(a_dups);
     uint64_t l_min_ts_update = (uint64_t)-1;
-    dap_hash_fast_t l_event_hash, l_winner_hash = {};
+    byte_t l_event_mem_region[DAP_CHAIN_POA_ROUND_FILTER_MEM_SIZE],
+           l_winner_mem_region[DAP_CHAIN_POA_ROUND_FILTER_MEM_SIZE] = {};
     enum dap_chain_poa_round_filter_stage l_stage = DAP_CHAIN_POA_ROUND_FILTER_STAGE_START;
     while (l_stage++ < DAP_CHAIN_POA_ROUND_FILTER_STAGE_MAX) {
         for (dap_list_t *it = l_dups; it; it = it->next) {
@@ -485,16 +502,14 @@ static dap_chain_cs_dag_event_round_item_t *s_round_event_choose_dup(dap_list_t
                 if (l_round_item->round_info.ts_update != l_min_ts_update)
                     l_dups = dap_list_remove_link(l_dups, it);
                 else {
-                    dap_chain_cs_dag_event_calc_hash((dap_chain_cs_dag_event_t *)l_round_item->event_n_signs,
-                                                     l_round_item->event_size, &l_event_hash);
-                    if (memcmp(&l_winner_hash, &l_event_hash, sizeof(dap_hash_fast_t)) < 0)
-                        l_winner_hash = l_event_hash;
+                    s_event_get_unique_mem_region(l_round_item, l_event_mem_region);
+                    if (memcmp(&l_winner_mem_region, &l_event_mem_region, DAP_CHAIN_POA_ROUND_FILTER_MEM_SIZE) > 0)
+                        memcpy(l_winner_mem_region, l_event_mem_region, DAP_CHAIN_POA_ROUND_FILTER_MEM_SIZE);
                 }
                 break;
-            case DAP_CHAIN_POA_ROUND_FILTER_STAGE_HASH:
-                dap_chain_cs_dag_event_calc_hash((dap_chain_cs_dag_event_t *)l_round_item->event_n_signs,
-                                                 l_round_item->event_size, &l_event_hash);
-                if (memcmp(&l_winner_hash, &l_event_hash, sizeof(dap_hash_fast_t)))
+            case DAP_CHAIN_POA_ROUND_FILTER_STAGE_MEM:
+                s_event_get_unique_mem_region(l_round_item, l_event_mem_region);
+                if (memcmp(&l_winner_mem_region, &l_event_mem_region, DAP_CHAIN_POA_ROUND_FILTER_MEM_SIZE))
                     l_dups = dap_list_remove_link(l_dups, it);
             default: break;
             }