From 0606fc6647bbd605d909cc2794eea956fa73e94d Mon Sep 17 00:00:00 2001
From: "roman.khlopkov" <roman.khlopkov@demlabs.net>
Date: Mon, 3 Jun 2024 18:53:05 +0300
Subject: [PATCH] [*] Segfault with net announce fix

---
 dap-sdk                            | 2 +-
 modules/net/dap_chain_ledger.c     | 8 +++-----
 modules/net/dap_chain_net.c        | 4 ++--
 modules/net/dap_chain_net_anchor.c | 1 +
 modules/net/dap_chain_node_cli.c   | 7 ++-----
 5 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/dap-sdk b/dap-sdk
index 41abc05d56..063776950c 160000
--- a/dap-sdk
+++ b/dap-sdk
@@ -1 +1 @@
-Subproject commit 41abc05d56f0a54a3d1158726aa6f70c030effa2
+Subproject commit 063776950c5bce0a5179eee970a5def10edffa41
diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c
index fb6fc36b8e..af4225190a 100644
--- a/modules/net/dap_chain_ledger.c
+++ b/modules/net/dap_chain_ledger.c
@@ -5279,7 +5279,7 @@ int dap_ledger_tx_remove(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap
         case TX_ITEM_TYPE_IN: {
             dap_ledger_wallet_balance_t *wallet_balance = NULL;
             l_cur_token_ticker = l_bound_item->in.token_ticker;
-            char *l_addr_str = dap_chain_addr_to_str(&l_bound_item->in.addr_from);
+            const char *l_addr_str = dap_chain_addr_to_str(&l_bound_item->in.addr_from);
             char *l_wallet_balance_key = dap_strjoin(" ", l_addr_str, l_cur_token_ticker, (char*)NULL);
             pthread_rwlock_rdlock(&PVT(a_ledger)->balance_accounts_rwlock);
             HASH_FIND_STR(PVT(a_ledger)->balance_accounts, l_wallet_balance_key, wallet_balance);
@@ -5346,7 +5346,6 @@ int dap_ledger_tx_remove(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap
     }
 
     // Update balance: deducts all outs from balances
-    bool l_multichannel = false;
     bool l_cross_network = false;
     for (dap_list_t *l_tx_out = l_list_tx_out; l_tx_out; l_tx_out = dap_list_next(l_tx_out)) {
         if (!l_tx_out->data) {
@@ -5387,7 +5386,6 @@ int dap_ledger_tx_remove(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap
             l_addr = &l_out_item_ext_256->addr;
             l_value = l_out_item_ext_256->header.value;
             l_cur_token_ticker = l_out_item_ext_256->token;
-            l_multichannel = true;
         } break;
         default:
             log_it(L_DEBUG, "Unknown item type %d", l_type);
@@ -5398,7 +5396,7 @@ int dap_ledger_tx_remove(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap
         else if (l_addr->net_id.uint64 != a_ledger->net->pub.id.uint64 &&
                  !dap_chain_addr_is_blank(l_addr))
             l_cross_network = true;
-        char *l_addr_str = dap_chain_addr_to_str(l_addr);
+        const char *l_addr_str = dap_chain_addr_to_str(l_addr);
         dap_ledger_wallet_balance_t *wallet_balance = NULL;
         char *l_wallet_balance_key = dap_strjoin(" ", l_addr_str, l_cur_token_ticker, (char*)NULL);
         if(s_debug_more) {
@@ -6605,4 +6603,4 @@ const char *dap_ledger_tx_calculate_main_ticker(dap_ledger_t *a_ledger, dap_chai
         *a_ledger_rc = l_rc;
     
     return l_main_ticker;
-}
\ No newline at end of file
+}
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 104b3a7a86..addabe4fa0 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -476,8 +476,8 @@ static void s_link_manager_callback_connected(dap_link_t *a_link, uint64_t a_net
     }
     dap_stream_ch_chain_net_pkt_hdr_t l_announce = { .version = DAP_STREAM_CH_CHAIN_NET_PKT_VERSION,
                                                      .net_id  = l_net->pub.id };
-    dap_client_write_unsafe(a_link->uplink.client, 'N', DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_ANNOUNCE,
-                                     &l_announce, sizeof(l_announce));
+    dap_stream_ch_pkt_send_by_addr(&a_link->addr, DAP_STREAM_CH_CHAIN_NET_ID, DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_ANNOUNCE,
+                                   &l_announce, sizeof(l_announce));
 }
 
 static bool s_net_check_link_is_premanent(dap_chain_net_t *a_net, dap_stream_node_addr_t a_addr)
diff --git a/modules/net/dap_chain_net_anchor.c b/modules/net/dap_chain_net_anchor.c
index e51977539f..e5825d6537 100644
--- a/modules/net/dap_chain_net_anchor.c
+++ b/modules/net/dap_chain_net_anchor.c
@@ -36,6 +36,7 @@
 #include "dap_chain_net_tx.h"
 #include "dap_chain_net_decree.h"
 #include "dap_chain_datum_anchor.h"
+#include "dap_chain_cs_esbocs.h"
 
 #define LOG_TAG "chain_net_anchor"
 
diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c
index 303093ff69..6f7fc4e777 100644
--- a/modules/net/dap_chain_node_cli.c
+++ b/modules/net/dap_chain_node_cli.c
@@ -29,11 +29,9 @@
 #include <assert.h>
 //#include <glib.h>
 #include <unistd.h>
-
-
 #include <pthread.h>
-
 #include "iputils/iputils.h"
+
 #include "dap_common.h"
 #include "dap_config.h"
 #include "dap_strfuncs.h"
@@ -44,8 +42,7 @@
 #include "dap_chain_node_cli_cmd_tx.h"
 #include "dap_cli_server.h"
 #include "dap_chain_node_cli.h"
-
-//#include "dap_chain_node_cli.h"
+#include "dap_notify_srv.h"
 
 #define LOG_TAG "chain_node_cli"
 static bool s_debug_cli = false;
-- 
GitLab