diff --git a/modules/common/dap_chain_datum_decree.c b/modules/common/dap_chain_datum_decree.c
index e2f613465fc7df5721c6a5c110a3f366ed4c6283..ba4d7d84b93cec870b55e07fff0aa66073d4412c 100644
--- a/modules/common/dap_chain_datum_decree.c
+++ b/modules/common/dap_chain_datum_decree.c
@@ -47,6 +47,24 @@ dap_sign_t *dap_chain_datum_decree_get_signs(dap_chain_datum_decree_t *a_decree,
     return l_signs_section;
 }
 
+bool dap_chain_datum_decree_find_pkey(dap_chain_datum_decree_t *a_decree, dap_pkey_t *a_pkey)
+{
+    dap_return_val_if_pass(!a_decree || !a_pkey || !a_pkey->header.size, false);
+    dap_sign_t *l_signs_section = (dap_sign_t*)(a_decree->data_n_signs + a_decree->header.data_size);
+    size_t l_sign_size = 0;
+    bool l_ret = false;
+    for (uint64_t l_offset = 0; !l_ret && l_offset + sizeof(dap_sign_t) < a_decree->header.signs_size; l_offset += l_sign_size) {
+        dap_sign_t *l_sign = (dap_sign_t *)(a_decree->data_n_signs + a_decree->header.data_size + l_offset);
+        l_sign_size = dap_sign_get_size(l_sign);
+        if (l_offset + l_sign_size <= l_offset || l_offset + l_sign_size > a_decree->header.signs_size)
+            break;
+        size_t l_pkey_ser_size = 0;
+        const uint8_t *l_pkey_ser = dap_sign_get_pkey(l_sign, &l_pkey_ser_size),
+        l_ret = (l_pkey_ser_size == a_pkey->header.size) && !memcmp(l_pkey_ser, a_pkey->pkey, l_pkey_ser_size);
+    }
+    return l_ret;
+}
+
 int dap_chain_datum_decree_get_fee(dap_chain_datum_decree_t *a_decree, uint256_t *a_fee_value)
 {
     dap_return_val_if_fail(a_decree && a_fee_value, -1);
@@ -397,9 +415,17 @@ dap_chain_datum_decree_t *dap_chain_datum_decree_sign_in_cycle(dap_cert_t **a_ce
 {
     size_t l_cur_sign_offset = a_datum_decree->header.data_size + a_datum_decree->header.signs_size;
     size_t l_total_signs_size = a_datum_decree->header.signs_size, l_total_sign_count = 0;
-
     for(size_t i = 0; i < a_certs_count; i++) {
-        dap_sign_t * l_sign = dap_cert_sign(a_certs[i], a_datum_decree,
+        dap_pkey_t *l_cur_pkey = dap_cert_to_pkey(a_certs[i]);
+        if (dap_chain_datum_decree_find_pkey(a_datum_decree, l_cur_pkey)) {
+            dap_chain_hash_fast_t l_pkey_hash = { };
+            dap_pkey_get_hash(l_cur_pkey, &l_pkey_hash);
+            log_it(L_ERROR, "Sign with %s pkey already exist in decree", dap_hash_fast_to_str_static(&l_pkey_hash));
+            DAP_DELETE(l_cur_pkey);
+            continue;;
+        }
+        DAP_DELETE(l_cur_pkey);
+        dap_sign_t *l_sign = dap_cert_sign(a_certs[i], a_datum_decree,
                                             sizeof(dap_chain_datum_decree_t) + a_datum_decree->header.data_size, DAP_SIGN_HASH_TYPE_DEFAULT);
         if (!l_sign) {
             log_it(L_ERROR, "Decree signing failed");
diff --git a/modules/common/include/dap_chain_datum_decree.h b/modules/common/include/dap_chain_datum_decree.h
index 0704a90437eef1d41b866481a778494892d5bf51..95c10046bfb503e506bfc37f2f45dd19bfce2c4c 100644
--- a/modules/common/include/dap_chain_datum_decree.h
+++ b/modules/common/include/dap_chain_datum_decree.h
@@ -352,3 +352,12 @@ void dap_chain_datum_decree_certs_dump_json(json_object * a_json_out, byte_t * a
  */
 dap_chain_datum_decree_t* dap_chain_datum_decree_sign_in_cycle(dap_cert_t ** a_certs, dap_chain_datum_decree_t *a_datum_decree,
                                                   size_t a_certs_count, size_t *a_total_sign_count);
+
+/**
+ * @brief dap_chain_datum_decree_find_sign
+ * @details find pkey in decree
+ * @param a_decree - decree to search sign
+ * @param a_pkey - pkey to search
+ * @return true if finded
+ */
+bool dap_chain_datum_decree_find_pkey(dap_chain_datum_decree_t *a_decree, dap_pkey_t *a_pkey);
\ No newline at end of file
diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c
index 36eccd76128cf6100c3059b33e123f474d03eda8..290bb02790046f592f775f6a175043a117e798e4 100644
--- a/modules/net/dap_chain_node_cli_cmd_tx.c
+++ b/modules/net/dap_chain_node_cli_cmd_tx.c
@@ -1793,8 +1793,7 @@ int cmd_decree(int a_argc, char **a_argv, void **a_str_reply)
                         l_chain?l_chain->name:"<undefined>");
                 return -5;
             }
-            DAP_DELETE(l_datum_hash_hex_str);
-            DAP_DELETE(l_datum_hash_base58_str);
+            DAP_DEL_MULTY(l_datum_hash_hex_str, l_datum_hash_base58_str);
         } else {
             dap_cli_server_cmd_set_reply_text(a_str_reply, "decree sign need -datum <datum hash> argument");
             return -2;