From 2997b5a23157a93f6ef61308cf649180be370cb1 Mon Sep 17 00:00:00 2001
From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net>
Date: Sun, 26 Apr 2020 22:13:04 +0700
Subject: [PATCH] [+] datum mempool add function

---
 dap_chain_mempool.c | 44 +++++++++++++++++++++++++++-----------------
 dap_chain_mempool.h |  2 +-
 2 files changed, 28 insertions(+), 18 deletions(-)

diff --git a/dap_chain_mempool.c b/dap_chain_mempool.c
index bea7f983be..528ecf06c1 100755
--- a/dap_chain_mempool.c
+++ b/dap_chain_mempool.c
@@ -85,11 +85,28 @@ int dap_datum_mempool_init(void)
  * @param a_datum
  * @return
  */
-int dap_chain_mempool_datum_add(dap_chain_datum_t * a_datum)
+int dap_chain_mempool_datum_add(dap_chain_datum_t * a_datum, dap_chain_t * a_chain )
 {
-    // TODO
-    (void) a_datum;
-    return -1;
+    if( a_datum == NULL){
+        log_it(L_ERROR, "NULL datum trying to add in mempool");
+        return -1;
+    }
+    int ret =0;
+
+    dap_chain_hash_fast_t l_key_hash;
+    dap_hash_fast(a_datum->data , a_datum->header.data_size, &l_key_hash);
+
+    char * l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash);
+    char * l_gdb_group = dap_chain_net_get_gdb_group_mempool(a_chain);
+    if(dap_chain_global_db_gr_set(dap_strdup(l_key_str), (byte_t *) a_datum, dap_chain_datum_size(a_datum)
+            ,l_gdb_group)) {
+        log_it(L_NOTICE, "Datum with data's hash %s was placed in mempool", l_key_str);
+    }else{
+        log_it(L_WARNING, "Can't place data's hash %s was placed in mempool", l_key_str);
+    }
+    DAP_DELETE(l_gdb_group);
+    DAP_DELETE(l_key_str);
+    return ret;
 }
 
 /**
@@ -207,21 +224,13 @@ int dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_t *a_key_from
 
     size_t l_tx_size = dap_chain_datum_tx_get_size(l_tx);
     dap_chain_datum_t *l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, l_tx, l_tx_size);
-
-    dap_chain_hash_fast_t l_key_hash;
-    dap_hash_fast(l_tx, l_tx_size, &l_key_hash);
     DAP_DELETE(l_tx);
-
-    char * l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash);
-    char * l_gdb_group = dap_chain_net_get_gdb_group_mempool(a_chain);
-    if(dap_chain_global_db_gr_set(dap_strdup(l_key_str), (uint8_t *) l_datum, dap_chain_datum_size(l_datum)
-            ,l_gdb_group)) {
-        log_it(L_NOTICE, "Transaction %s placed in mempool", l_key_str);
+    if(dap_chain_mempool_datum_add (l_datum, a_chain) == 0){
+        return 0;
+    }else{
+        DAP_DELETE( l_datum );
+        return -4;
     }
-    DAP_DELETE(l_gdb_group);
-    DAP_DELETE(l_key_str);
-
-    return 0;
 }
 
 /**
@@ -418,6 +427,7 @@ int dap_chain_mempool_tx_create_massive( dap_chain_t * a_chain, dap_enc_key_t *a
 
     }
     dap_list_free_full(l_list_used_out, free);
+
     char * l_gdb_group = dap_chain_net_get_gdb_group_mempool(a_chain);
 
     //return 0;
diff --git a/dap_chain_mempool.h b/dap_chain_mempool.h
index f71785cc32..abe82a61fc 100755
--- a/dap_chain_mempool.h
+++ b/dap_chain_mempool.h
@@ -67,7 +67,7 @@ dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t *
         const dap_chain_addr_t* a_addr_to, dap_enc_key_t * l_key_tx_sign, dap_chain_datum_tx_receipt_t * l_receipt, size_t l_receipt_size);
 
 
-int dap_chain_mempool_datum_add(dap_chain_datum_t * a_datum);
+int dap_chain_mempool_datum_add(dap_chain_datum_t * a_datum, dap_chain_t * a_chain );
 int dap_chain_mempool_tx_create_massive( dap_chain_t * a_chain, dap_enc_key_t *a_key_from,
         const dap_chain_addr_t* a_addr_from, const dap_chain_addr_t* a_addr_to,
         const dap_chain_addr_t* a_addr_fee,
-- 
GitLab