diff --git a/CMakeLists.txt b/CMakeLists.txt
index 270e002866420dfa5e44e1417093d0504f61ec10..6e3de449bc75b9657d8c47d870f648770498aec1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ project(cellframe-sdk C)
 cmake_minimum_required(VERSION 3.0)
 
 set(CMAKE_C_STANDARD 11)
-set(CELLFRAME_SDK_NATIVE_VERSION "3.0-7")
+set(CELLFRAME_SDK_NATIVE_VERSION "3.0-8")
 add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
 set(DAPSDK_MODULES "")
 message("Cellframe modules: ${CELLFRAME_MODULES}")
diff --git a/dap-sdk/core/include/dap_common.h b/dap-sdk/core/include/dap_common.h
index 164121dd11fe57bf04f86571482f2bfcc3217589..641096894ded2889af8adec2eced6e15258473d1 100755
--- a/dap-sdk/core/include/dap_common.h
+++ b/dap-sdk/core/include/dap_common.h
@@ -451,6 +451,7 @@ char *dap_log_get_item(time_t a_start_time, int a_limit);
 #define DAP_PRINTF_ATTR(format_index, args_index)
 #endif /* __GNUC__ */
 
+
 DAP_PRINTF_ATTR(3, 4) void _log_it( const char * log_tag, enum dap_log_level, const char * format, ... );
 #define log_it( _log_level, ...) _log_it( LOG_TAG, _log_level, ##__VA_ARGS__)
 
diff --git a/dap-sdk/core/src/dap_common.c b/dap-sdk/core/src/dap_common.c
index 2789fec964794a738da7f5df3c47f67aea44ddfb..9787b2bf2dabae02e12dd7afd38c9d411829af00 100755
--- a/dap-sdk/core/src/dap_common.c
+++ b/dap-sdk/core/src/dap_common.c
@@ -1085,15 +1085,21 @@ void dap_usleep(time_t a_microseconds)
 
 
 char* dap_ctime_r(time_t *a_time, char* a_buf){
-    if (*a_time > DAP_END_OF_DAYS) {
-        return "(null)\r\n";
+    char *l_fail_ret = "(null)\r\n";
+    if (!a_buf)
+        return l_fail_ret;
+    if(!a_time || *a_time > DAP_END_OF_DAYS) {
+        strcpy(a_buf, l_fail_ret);
+        return l_fail_ret;
     }
     struct tm l_time;
     localtime_r(a_time, &l_time);
     char *l_str_time = asctime_r(&l_time, a_buf);
     if (l_str_time)
         return  l_str_time;
-    else
-        return "(null)\r\n";
+    else {
+        strcpy(a_buf, l_fail_ret);
+        return l_fail_ret;
+    }
 }
 
diff --git a/dap-sdk/core/src/dap_string.c b/dap-sdk/core/src/dap_string.c
index 9016f7bfc0fcb0c332ae9aaa8c4cfd550ad25c17..e7d61347828f7033b34f99c347e0ee715c936eb1 100755
--- a/dap-sdk/core/src/dap_string.c
+++ b/dap-sdk/core/src/dap_string.c
@@ -836,10 +836,18 @@ void dap_string_append_vprintf(dap_string_t *string, const char *format, va_list
 
     len = dap_vasprintf(&buf, format, args);
 
-    if(len >= 0) {
+    if (len >= 0) {
         dap_string_maybe_expand(string, len);
-        memcpy(string->str + string->len, buf, len + 1);
-        string->len += len;
+        if (string->str) {
+            memcpy(string->str + string->len, buf, len + 1);
+            string->len += len;
+        } else {
+            const char *l_mem_out = "Out of memory!";
+            const int l_fail_len = strlen(l_mem_out) + 1;
+            string->str = DAP_NEW_SIZE(char, l_fail_len);
+            strcpy(string->str, l_mem_out);
+            string->len = string->allocated_len = l_fail_len;
+        }
         DAP_DELETE(buf);
     }
 }
diff --git a/dap-sdk/crypto/include/dap_cert.h b/dap-sdk/crypto/include/dap_cert.h
index 0dee3bf8858f543c7878ac73e8eaf341be497b25..ee526e8649a01c2fc532e09c2f0e645266d8e8d6 100755
--- a/dap-sdk/crypto/include/dap_cert.h
+++ b/dap-sdk/crypto/include/dap_cert.h
@@ -45,7 +45,7 @@ typedef enum dap_cert_metadata_type {
 typedef struct dap_cert_metadata {
     const char *key;
     uint32_t length;
-    dap_cert_metadata_type_t type : 8;
+    dap_cert_metadata_type_t type;
     byte_t value[];
 } dap_cert_metadata_t;
 
diff --git a/dap-sdk/crypto/include/dap_hash.h b/dap-sdk/crypto/include/dap_hash.h
index 0f152542f8305978e755706e5a41bd7560ff4c8d..73b0c3a2869e0d07e8603766c0c678cbd453a7c5 100755
--- a/dap-sdk/crypto/include/dap_hash.h
+++ b/dap-sdk/crypto/include/dap_hash.h
@@ -93,6 +93,14 @@ static inline bool dap_hash_fast_compare(dap_hash_fast_t *a_hash1, dap_hash_fast
     return false;
 }
 
+/**
+ * @brief 
+ * compare hash with blank hash
+ * @param a_hash 
+ * @return true 
+ * @return false 
+ */
+
 static inline bool dap_hash_fast_is_blank( dap_hash_fast_t *a_hash )
 {
     static dap_hash_fast_t l_blank_hash = {};
diff --git a/dap-sdk/crypto/include/dap_pkey.h b/dap-sdk/crypto/include/dap_pkey.h
index 56805e565e327460c4dc7aaa1e29b0e82a55c427..93040b6a0617ccb2b2178826787c81ff27ac6c4e 100755
--- a/dap-sdk/crypto/include/dap_pkey.h
+++ b/dap-sdk/crypto/include/dap_pkey.h
@@ -37,9 +37,10 @@ enum dap_pkey_type_enum {
     PKEY_TYPE_MULTI = 0xffff ///  @brief Has inside subset of different keys
 
 };
+typedef uint16_t dap_pkey_type_enum_t;
 
 typedef union dap_pkey_type{
-    enum dap_pkey_type_enum type: 16;
+    dap_pkey_type_enum_t type;
     uint16_t raw;
 } dap_pkey_type_t;
 
diff --git a/dap-sdk/crypto/include/dap_sign.h b/dap-sdk/crypto/include/dap_sign.h
index 4018361a65e70323cda9cb9aca0a741a0ca4b53c..23d13c366641c28d3f6f0bae351bdc3f2c1a92b2 100755
--- a/dap-sdk/crypto/include/dap_sign.h
+++ b/dap-sdk/crypto/include/dap_sign.h
@@ -32,7 +32,7 @@
 #include "dap_hash.h"
 #include "dap_string.h"
 
-typedef enum {
+enum dap_sign_type_enum {
     SIG_TYPE_NULL = 0x0000,
     SIG_TYPE_BLISS = 0x0001,
     SIG_TYPE_DEFO = 0x0002, /// @brief key image for anonymous transaction
@@ -41,10 +41,11 @@ typedef enum {
     SIG_TYPE_DILITHIUM = 0x0102, /// @brief
     SIG_TYPE_MULTI_CHAINED = 0x0f00, ///  @brief Has inside subset of different signatures and sign composed with all of them
     SIG_TYPE_MULTI_COMBINED = 0x0f01 ///  @brief Has inside subset of different public keys and sign composed with all of appropriate private keys
-} dap_sign_type_enum_t;
+};
+typedef uint32_t dap_sign_type_enum_t;
 
 typedef union dap_sign_type {
-    dap_sign_type_enum_t type: 32;
+    dap_sign_type_enum_t type;
     uint32_t raw;
 } DAP_ALIGN_PACKED dap_sign_type_t;
 
diff --git a/dap-sdk/crypto/src/dap_cert.c b/dap-sdk/crypto/src/dap_cert.c
index 4b9d0e35a417f366e8e95f35f8b5a94a00eb0f40..8e77a4649d4d2e773c569adc4e32168d8cb2a6a1 100755
--- a/dap-sdk/crypto/src/dap_cert.c
+++ b/dap-sdk/crypto/src/dap_cert.c
@@ -82,11 +82,13 @@ int dap_cert_init()
 }
 
 /**
- * @brief dap_cert_parse_str_list
- * @param a_certs_str
- * @param a_certs
- * @param a_certs_size_t
- * @return summary size for signatures of all certs in list
+ * @brief 
+ * parse list of certificate from config file (if it is presented)
+ * in current implementation this function is used when node certificate (node-addr.dcert) is not generated 
+ * @param a_certs_str const char * string with certificate name (node-addr)
+ * @param a_certs dap_cert_t *** array with certificates
+ * @param a_certs_size size of certificate
+ * @return size_t 
  */
 size_t dap_cert_parse_str_list(const char * a_certs_str, dap_cert_t *** a_certs, size_t * a_certs_size)
 {
@@ -134,10 +136,11 @@ size_t dap_cert_parse_str_list(const char * a_certs_str, dap_cert_t *** a_certs,
 
 
 /**
- * @brief dap_cert_sign_output_size
- * @param a_cert
- * @param a_size_wished
- * @return
+ * @brief 
+ * simply call dap_sign_create_output_unserialized_calc_size( a_cert->enc_key,a_size_wished)
+ * @param a_cert dap_cert_t * certificate object
+ * @param a_size_wished wished data size (don't used in current implementation)
+ * @return size_t 
  */
 size_t dap_cert_sign_output_size(dap_cert_t * a_cert, size_t a_size_wished)
 {
@@ -160,12 +163,13 @@ size_t dap_cert_sign_output_size(dap_cert_t * a_cert, size_t a_size_wished)
 }*/
 
 /**
- * @brief dap_cert_sign
- * @param a_cert
- * @param a_data
- * @param a_data_size
- * @param a_output_size_wished
- * @return
+ * @brief 
+ * sign data by encryption key from certificate
+ * @param a_cert dap_cert_t * certificate object
+ * @param a_data data for signing
+ * @param a_data_size data size
+ * @param a_output_size_wished wished data size (don't used in current implementation)
+ * @return dap_sign_t* 
  */
 dap_sign_t * dap_cert_sign(dap_cert_t * a_cert, const void * a_data
                                        , size_t a_data_size, size_t a_output_size_wished )
@@ -176,10 +180,11 @@ dap_sign_t * dap_cert_sign(dap_cert_t * a_cert, const void * a_data
 }
 
 /**
- * @brief dap_cert_add_cert_sign
- * @param a_cert
- * @param a_cert_signer
- * @return
+ * @brief 
+ * sign certificate with another certificate (a_cert->signs)
+ * @param a_cert dap_cert_t certificate object
+ * @param a_cert_signer dap_cert_t certificate object, which signs a_cert
+ * @return int 
  */
 int dap_cert_add_cert_sign(dap_cert_t * a_cert, dap_cert_t * a_cert_signer)
 {
@@ -196,10 +201,13 @@ int dap_cert_add_cert_sign(dap_cert_t * a_cert, dap_cert_t * a_cert_signer)
 
 
 /**
- * @brief dap_cert_generate_mem
- * @param a_cert_name
- * @param a_key_type
- * @return
+ * @brief generate certificate in memory with specified seed
+ * 
+ * @param a_cert_name const char * name of certificate
+ * @param a_key_type dap_enc_key_type_t key type
+ * @param a_seed const void* seed for certificate generation
+ * @param a_seed_size size_t size of seed
+ * @return dap_cert_t* 
  */
 dap_cert_t * dap_cert_generate_mem_with_seed(const char * a_cert_name, dap_enc_key_type_t a_key_type,
         const void* a_seed, size_t a_seed_size)
@@ -222,10 +230,11 @@ dap_cert_t * dap_cert_generate_mem_with_seed(const char * a_cert_name, dap_enc_k
 }
 
 /**
- * @brief dap_cert_generate_mem
- * @param a_cert_name
- * @param a_key_type
- * @return
+ * @brief generate certificate in memory
+ * 
+ * @param a_cert_name const char * certificate name
+ * @param a_key_type encryption key type
+ * @return dap_cert_t* 
  */
 dap_cert_t * dap_cert_generate_mem(const char * a_cert_name, dap_enc_key_type_t a_key_type)
 {
@@ -233,11 +242,12 @@ dap_cert_t * dap_cert_generate_mem(const char * a_cert_name, dap_enc_key_type_t
 }
 
 /**
- * @brief dap_cert_generate
- * @param a_cert_name
- * @param a_file_path
- * @param a_key_type
- * @return
+ * @brief generate certificate and save it to file
+ * 
+ * @param a_cert_name const char * certificate name
+ * @param a_file_path const char * path to certificate file
+ * @param a_key_type dap_enc_key_type_t key_type
+ * @return dap_cert_t* 
  */
 dap_cert_t * dap_cert_generate(const char * a_cert_name
                                            , const char * a_file_path,dap_enc_key_type_t a_key_type )
@@ -259,7 +269,8 @@ dap_cert_t * dap_cert_generate(const char * a_cert_name
 
 /**
  * @brief dap_cert_delete_by_name
- * @param a_cert_name
+ * delete certificate object, finding by name
+ * @param a_cert_name const char * certificate name
  */
 void dap_cert_delete_by_name(const char * a_cert_name)
 {
@@ -271,8 +282,9 @@ void dap_cert_delete_by_name(const char * a_cert_name)
 }
 
 /**
- * @brief dap_cert_find_by_name
- * @param a_cert_name
+ * @brief
+ * find certificate by name in path, which is configured ca_folders parameter in chain config 
+ * @param a_cert_name const char *
  * @return
  */
 dap_cert_t * dap_cert_find_by_name(const char * a_cert_name)
@@ -313,7 +325,8 @@ dap_list_t *dap_cert_get_all_mem()
 
 /**
  * @brief dap_cert_new
- * @param a_name
+ * create certificate object with specified name
+ * @param a_name const char *
  * @return
  */
 dap_cert_t * dap_cert_new(const char * a_name)
@@ -332,7 +345,8 @@ dap_cert_t * dap_cert_new(const char * a_name)
 
 /**
  * @brief s_cert_delete
- * @param a_cert
+ * delete certificate object
+ * @param a_cert dap_cert_t *
  */
 void dap_cert_delete(dap_cert_t * a_cert)
 {
@@ -354,9 +368,10 @@ void dap_cert_delete(dap_cert_t * a_cert)
 
 /**
  * @brief dap_cert_add_file
- * @param a_cert_name
- * @param a_folder_path
- * @return
+ * load certificate file from folder (specified in chain config)
+ * @param a_cert_name const char * certificate name
+ * @param a_folder_path const char * certificate path
+ * @return dap_cert_t
  */
 dap_cert_t * dap_cert_add_file(const char * a_cert_name,const char *a_folder_path)
 {
@@ -378,9 +393,11 @@ dap_cert_t * dap_cert_add_file(const char * a_cert_name,const char *a_folder_pat
 }
 
 /**
- * @brief dap_cert_save_to_folder
- * @param a_cert
- * @param a_file_dir_path
+ * @brief save certitificate to folder
+ * 
+ * @param a_cert dap_cert_t * certiticate object
+ * @param a_file_dir_path const char * path to directory with certificate
+ * @return int 
  */
 int dap_cert_save_to_folder(dap_cert_t * a_cert, const char *a_file_dir_path)
 {
@@ -396,8 +413,10 @@ int dap_cert_save_to_folder(dap_cert_t * a_cert, const char *a_file_dir_path)
 
 /**
  * @brief dap_cert_to_pkey
- * @param a_cert
- * @return
+ * get public key from certificate 
+ *  dap_pkey_from_enc_key( a_cert->enc_key )
+ * @param a_cert dap_cert_t certificate object
+ * @return dap_pkey_t
  */
 dap_pkey_t * dap_cert_to_pkey(dap_cert_t * a_cert)
 {
@@ -408,10 +427,11 @@ dap_pkey_t * dap_cert_to_pkey(dap_cert_t * a_cert)
 }
 
 /**
- * @brief dap_cert_compare_with_sign
- * @param a_cert
- * @param a_sign
- * @return
+ * @brief 
+ * compare certificate encryption key with key, which was used for event or block signing
+ * @param a_cert dap_cert_t * certificate object
+ * @param a_sign dap_sign_t * dap_sign_t object (signed block or event)
+ * @return int 
  */
 int dap_cert_compare_with_sign (dap_cert_t * a_cert,const dap_sign_t * a_sign)
 {
@@ -434,8 +454,8 @@ int dap_cert_compare_with_sign (dap_cert_t * a_cert,const dap_sign_t * a_sign)
 
 
 /**
- * @brief dap_cert_count_cert_sign
- * @param a_cert
+ * @brief Certificates signatures chain size
+ * @param a_cert dap_cert_t certificate object
  * @return
  */
 size_t dap_cert_count_cert_sign(dap_cert_t * a_cert)
@@ -448,8 +468,8 @@ size_t dap_cert_count_cert_sign(dap_cert_t * a_cert)
 
 
 /**
- * @brief dap_cert_dump
- * @param a_cert
+ * @brief show certificate information
+ * @param a_cert dap_cert_t certificate object
  */
 void dap_cert_dump(dap_cert_t * a_cert)
 {
@@ -491,8 +511,10 @@ void dap_cert_dump(dap_cert_t * a_cert)
 }
 
 /**
- * @brief dap_cert_get_folder
- * @param a_folder_path
+ * @brief get certificate folder path
+ * usage example: dap_cert_get_folder(0) 
+ * @param a_n_folder_path 
+ * @return const char* 
  */
 const char* dap_cert_get_folder(int a_n_folder_path)
 {
@@ -511,8 +533,9 @@ const char* dap_cert_get_folder(int a_n_folder_path)
 
 
 /**
- * @brief dap_cert_add_folder
- * @param a_folder_path
+ * @brief load certificates from specified folder
+ * 
+ * @param a_folder_path const char *
  */
 void dap_cert_add_folder(const char *a_folder_path)
 {
@@ -551,6 +574,15 @@ void dap_cert_add_folder(const char *a_folder_path)
         log_it(L_WARNING, "Can't add folder %s to cert manager",a_folder_path);
 }
 
+/**
+ * @brief 
+ * 
+ * @param a_key const char *
+ * @param a_type dap_cert_metadata_type_t
+ * @param a_value void *
+ * @param a_value_size size_t
+ * @return dap_cert_metadata_t* 
+ */
 dap_cert_metadata_t *dap_cert_new_meta(const char *a_key, dap_cert_metadata_type_t a_type, void *a_value, size_t a_value_size)
 {
     if (!a_key || a_type > DAP_CERT_META_CUSTOM || (!a_value && a_value_size)) {
@@ -568,12 +600,13 @@ dap_cert_metadata_t *dap_cert_new_meta(const char *a_key, dap_cert_metadata_type
 }
 
 /**
- * @brief dap_cert_add_meta Add metadata to certificate
- * @param a_cert
- * @param a_key
- * @param a_type
- * @param a_value
- * @param a_value_size
+ * @brief Add metadata to certificate
+ * action for command "cellframe-node cert add_metadata <cert name> <key:type:length:value>"
+ * @param a_cert dap_cert_t * certificate object
+ * @param a_key const char * key
+ * @param a_type dap_cert_metadata_type_t type
+ * @param a_value void * value
+ * @param a_value_size size_t length
  */
 void dap_cert_add_meta(dap_cert_t *a_cert, const char *a_key, dap_cert_metadata_type_t a_type, void *a_value, size_t a_value_size)
 {
@@ -588,6 +621,15 @@ void dap_cert_add_meta(dap_cert_t *a_cert, const char *a_key, dap_cert_metadata_
     }
 }
 
+/**
+ * @brief Add metadata to certificate with additional value modification
+ * 
+ * @param a_cert dap_cert_t * certificate object
+ * @param a_key const char * key
+ * @param a_type dap_cert_metadata_type_t type
+ * @param a_value void * value
+ * @param a_value_size size_t length
+ */
 void dap_cert_add_meta_scalar(dap_cert_t *a_cert, const char *a_key, dap_cert_metadata_type_t a_type, uint64_t a_value, size_t a_value_size)
 {
     void *l_value;
@@ -627,15 +669,24 @@ void dap_cert_add_meta_scalar(dap_cert_t *a_cert, const char *a_key, dap_cert_me
 }
 
 /**
- * @brief dap_cert_get_meta
- * @param a_cert
- * @param a_field
+ * @brief get specified metadata from certificate
+ * 
+ * @param a_cert dap_cert_t * certificate object
+ * @param a_field const char * field, which will be gotten from metadata
+ * @return dap_cert_metadata_t* 
  */
 dap_cert_metadata_t *dap_cert_get_meta(dap_cert_t *a_cert, const char *a_field)
 {
     return dap_binary_tree_search(a_cert->metadata, a_field);
 }
 
+/**
+ * @brief get specified metadata from certificate in string (DAP_CERT_META_STRING) format
+ * 
+ * @param a_cert dap_cert_t * certificate object
+ * @param a_field const char * field, which will be gotten from metadata
+ * @return char* 
+ */
 char *dap_cert_get_meta_string(dap_cert_t *a_cert, const char *a_field)
 {
     dap_cert_metadata_t *l_meta = dap_cert_get_meta(a_cert, a_field);
@@ -649,6 +700,14 @@ char *dap_cert_get_meta_string(dap_cert_t *a_cert, const char *a_field)
     return strndup((char *)&l_meta->value[0], l_meta->length);
 }
 
+/**
+ * @brief get metadata from certificate with boolean (DAP_CERT_META_BOOL) type
+ * 
+ * @param a_cert dap_cert_t * certificate object
+ * @param a_field const char * field, which will be gotten from metadata
+ * @return true 
+ * @return false 
+ */
 bool dap_cert_get_meta_bool(dap_cert_t *a_cert, const char *a_field)
 {
     dap_cert_metadata_t *l_meta = dap_cert_get_meta(a_cert, a_field);
@@ -665,6 +724,13 @@ bool dap_cert_get_meta_bool(dap_cert_t *a_cert, const char *a_field)
     return *(bool *)&l_meta->value[0];
 }
 
+/**
+ * @brief get metadata from certificate with int (DAP_CERT_META_INT) type
+ * 
+ * @param a_cert dap_cert_t * certificate object
+ * @param a_field const char * field, which will be gotten from metadata
+ * @return int 
+ */
 int dap_cert_get_meta_int(dap_cert_t *a_cert, const char *a_field)
 {
     dap_cert_metadata_t *l_meta = dap_cert_get_meta(a_cert, a_field);
@@ -681,6 +747,13 @@ int dap_cert_get_meta_int(dap_cert_t *a_cert, const char *a_field)
     return *(int *)&l_meta->value[0];
 }
 
+/**
+ * @brief get metadata from certificate with datetime (DAP_CERT_META_DATETIME) type
+ * 
+ * @param a_cert dap_cert_t * certificate object
+ * @param a_field const char * field, which will be gotten from metadata
+ * @return time_t 
+ */
 time_t dap_cert_get_meta_time(dap_cert_t *a_cert, const char *a_field)
 {
     dap_cert_metadata_t *l_meta = dap_cert_get_meta(a_cert, a_field);
@@ -697,6 +770,13 @@ time_t dap_cert_get_meta_time(dap_cert_t *a_cert, const char *a_field)
     return *(time_t *)&l_meta->value[0];
 }
 
+/**
+ * @brief get metadata from certificate with datetime (DAP_CERT_META_DATETIME_PERIOD) type
+ * 
+ * @param a_cert dap_cert_t * certificate object
+ * @param a_field const char * field, which will be gotten from metadata
+ * @return time_t 
+ */
 time_t dap_cert_get_meta_period(dap_cert_t *a_cert, const char *a_field)
 {
     dap_cert_metadata_t *l_meta = dap_cert_get_meta(a_cert, a_field);
@@ -713,6 +793,13 @@ time_t dap_cert_get_meta_period(dap_cert_t *a_cert, const char *a_field)
     return *(time_t *)&l_meta->value[0];
 }
 
+/**
+ * @brief get metadata from certificate with dap_sign_t (DAP_CERT_META_SIGN) type
+ * 
+ * @param a_cert dap_cert_t * certificate object
+ * @param a_field const char * field, which will be gotten from metadata
+ * @return dap_sign_t* 
+ */
 dap_sign_t *dap_cert_get_meta_sign(dap_cert_t *a_cert, const char *a_field)
 {
     dap_cert_metadata_t *l_meta = dap_cert_get_meta(a_cert, a_field);
@@ -730,6 +817,14 @@ dap_sign_t *dap_cert_get_meta_sign(dap_cert_t *a_cert, const char *a_field)
     return l_ret;
 }
 
+/**
+ * @brief get metadata from certificate with custom (DAP_CERT_META_CUSTOM) type
+ * 
+ * @param a_cert dap_cert_t * certificate object
+ * @param a_field const char * field, which will be gotten from metadata
+ * @param a_meta_size_out size_t size of recieved data
+ * @return void* 
+ */
 void *dap_cert_get_meta_custom(dap_cert_t *a_cert, const char *a_field, size_t *a_meta_size_out)
 {
     dap_cert_metadata_t *l_meta = dap_cert_get_meta(a_cert, a_field);
@@ -748,6 +843,7 @@ void *dap_cert_get_meta_custom(dap_cert_t *a_cert, const char *a_field, size_t *
 
 /**
  * @brief dap_cert_deinit
+ * empty function
  */
 void dap_cert_deinit()
 {
diff --git a/dap-sdk/crypto/src/dap_pkey.c b/dap-sdk/crypto/src/dap_pkey.c
index 4a62c3820887fc8789e959f59a57c8ee436f1bf2..a8a40a9ecbce9576cad556911291cc4965543abe 100755
--- a/dap-sdk/crypto/src/dap_pkey.c
+++ b/dap-sdk/crypto/src/dap_pkey.c
@@ -30,9 +30,10 @@
 
 
 /**
- * @brief dap_pkey_from_enc_key
- * @param a_key
- * @return
+ * @brief 
+ * convert encryption key to public key
+ * @param a_key dap_enc_key_t encryption key
+ * @return dap_pkey_t* 
  */
 dap_pkey_t* dap_pkey_from_enc_key(dap_enc_key_t *a_key)
 {
@@ -51,9 +52,10 @@ dap_pkey_t* dap_pkey_from_enc_key(dap_enc_key_t *a_key)
 
 /**
  * @brief dap_pkey_from_enc_key_output
- * @param a_key
- * @param a_output
- * @return
+ * convert encryption key to public key and placed it in output buffer
+ * @param a_key dap_enc_key_t encryption key object
+ * @param a_output output data
+ * @return result
  */
 int dap_pkey_from_enc_key_output(dap_enc_key_t *a_key, void * a_output)
 {
diff --git a/dap-sdk/crypto/src/dap_sign.c b/dap-sdk/crypto/src/dap_sign.c
index dd1625e88f0215082e14f7330ec070a28b8e8b66..2582d4b1c3a29452a9c377a8c96ef986ae510074 100755
--- a/dap-sdk/crypto/src/dap_sign.c
+++ b/dap-sdk/crypto/src/dap_sign.c
@@ -38,7 +38,13 @@
 //static dap_sign_t * s_sign_null = NULL;
 static bliss_signature_t s_sign_bliss_null = {0};
 
-// calc signature size
+/**
+ * @brief get signature size (different for specific crypto algorithm)
+ * 
+ * @param a_key dap_enc_key_t * encryption key object
+ * @param a_output_wish_size size_t output size
+ * @return size_t 
+ */
 size_t dap_sign_create_output_unserialized_calc_size(dap_enc_key_t * a_key, size_t a_output_wish_size )
 {
     (void)a_output_wish_size;
@@ -60,8 +66,8 @@ size_t dap_sign_create_output_unserialized_calc_size(dap_enc_key_t * a_key, size
 
 
 /**
- * @brief dap_sign_type_from_key_type
- * @param a_key_type
+ * @brief get sign type (dap_sign_type_t) type from key type (dap_enc_key_type_t)
+ * @param a_key_type dap_enc_key_type_t key type
  * @return
  */
 dap_sign_type_t dap_sign_type_from_key_type( dap_enc_key_type_t a_key_type)
@@ -79,9 +85,9 @@ dap_sign_type_t dap_sign_type_from_key_type( dap_enc_key_type_t a_key_type)
 }
 
 /**
- * @brief dap_sign_type_to_key_type
- * @param a_chain_sign_type
- * @return
+ * @brief convert chain sign type (dap_sign_type_t) to encryption key type (dap_enc_key_type_t)
+ * @param a_chain_sign_type dap_enc_key_type_t signature type
+ * @return dap_enc_key_type_t
  */
 dap_enc_key_type_t  dap_sign_type_to_key_type(dap_sign_type_t  a_chain_sign_type)
 {
@@ -97,9 +103,10 @@ dap_enc_key_type_t  dap_sign_type_to_key_type(dap_sign_type_t  a_chain_sign_type
 
 
 /**
- * @brief dap_sign_type_to_str
- * @param a_chain_sign_type
- * @return
+ * @brief convert sign type (dap_sign_type_t) to string format
+ * [sig_bliss,sig_tesla,sig_picnic,sig_dil,sig_multi2,sig_multi]
+ * @param a_chain_sign_type sign type dap_sign_type_t
+ * @return const char* 
  */
 const char * dap_sign_type_to_str(dap_sign_type_t a_chain_sign_type)
 {
@@ -116,9 +123,10 @@ const char * dap_sign_type_to_str(dap_sign_type_t a_chain_sign_type)
 }
 
 /**
- * @brief dap_pkey_type_from_sign
- * @param a_pkey_type
- * @return
+ * @brief convert public key type (dap_pkey_type_t) to dap_sign_type_t type
+ * 
+ * @param a_pkey_type dap_pkey_type_t key type
+ * @return dap_sign_type_t 
  */
 dap_sign_type_t dap_pkey_type_from_sign( dap_pkey_type_t a_pkey_type)
 {
@@ -136,9 +144,10 @@ dap_sign_type_t dap_pkey_type_from_sign( dap_pkey_type_t a_pkey_type)
 
 
 /**
- * @brief dap_sign_type_from_str
- * @param a_type_str
- * @return
+ * @brief convert string to dap_sign_type_t type
+ * 
+ * @param a_type_str const char * algorithm type [sig_bliss,sig_tesla,sig_picnic,sig_dil,sig_multi2,sig_multi]
+ * @return dap_sign_type_t 
  */
 dap_sign_type_t dap_sign_type_from_str(const char * a_type_str)
 {
@@ -162,12 +171,14 @@ dap_sign_type_t dap_sign_type_from_str(const char * a_type_str)
 }
 
 /**
- * @brief dap_sign_create_output
- * @param a_key
- * @param a_data
- * @param a_data_size
- * @param a_output [in/out]
- * @return
+ * @brief encrypt data
+ * call a_key->enc_na or dap_enc_sig_bliss_get_sign
+ * @param a_key dap_enc_key_t key object
+ * @param a_data const void * data
+ * @param a_data_size const size_t size of data
+ * @param a_output void * output buffer
+ * @param a_output_size size_t size of output buffer
+ * @return int 
  */
 static int dap_sign_create_output(dap_enc_key_t *a_key, const void * a_data, const size_t a_data_size,
         void * a_output, size_t *a_output_size)
@@ -194,12 +205,13 @@ static int dap_sign_create_output(dap_enc_key_t *a_key, const void * a_data, con
 }
 
 /**
- * @brief dap_sign_create
- * @param a_key
- * @param a_data
- * @param a_data_size
- * @param a_output_wish_size
- * @return
+ * @brief sign data with specified key
+ * 
+ * @param a_key dap_enc_key_t key object
+ * @param a_data const void * buffer with data
+ * @param a_data_size const size_t buffer size
+ * @param a_output_wish_size size_t output buffer size
+ * @return dap_sign_t* 
  */
 dap_sign_t * dap_sign_create(dap_enc_key_t *a_key, const void * a_data,
         const size_t a_data_size, size_t a_output_wish_size)
@@ -243,14 +255,16 @@ dap_sign_t * dap_sign_create(dap_enc_key_t *a_key, const void * a_data,
     }
     return NULL;
 }
+
 /**
- * @brief dap_sign_pack
- * @param a_key
- * @param a_sign_ser
- * @param a_sign_ser_size
- * @param a_pkey
- * @param a_pub_key_size
- * @return dap_sign_t*
+ * @brief create signed object header (dap_sign_t) from variables
+ * 
+ * @param a_key dap_enc_key_t key object
+ * @param a_sign_ser signed data buffer
+ * @param a_sign_ser_size buffer size
+ * @param a_pkey public key
+ * @param a_pub_key_size pulic key size
+ * @return dap_sign_t* 
  */
 dap_sign_t * dap_sign_pack(dap_enc_key_t *a_key, const void * a_sign_ser, const size_t a_sign_ser_size, const void * a_pkey, const size_t a_pub_key_size)
 {
@@ -266,10 +280,11 @@ dap_sign_t * dap_sign_pack(dap_enc_key_t *a_key, const void * a_sign_ser, const
 }
 
 /**
- * @brief dap_sign_get_sign
- * @param a_sign
- * @param a_sign_out
- * @return
+ * @brief 
+ * get a_sign->pkey_n_sign + a_sign->header.sign_pkey_size
+ * @param a_sign dap_sign_t object (header + raw signature data)
+ * @param a_sign_out  a_sign->header.sign_size
+ * @return uint8_t* 
  */
 uint8_t* dap_sign_get_sign(dap_sign_t *a_sign, size_t *a_sign_out)
 {
@@ -281,10 +296,11 @@ uint8_t* dap_sign_get_sign(dap_sign_t *a_sign, size_t *a_sign_out)
 }
 
 /**
- * @brief dap_sign_get_pkey
- * @param a_sign
- * @param a_pub_key_out
- * @return
+ * @brief get a_sign->pkey_n_sign and a_sign->header.sign_pkey_size (optionally)
+ * 
+ * @param a_sign dap_sign_t sign object
+ * @param a_pub_key_out [option] output pointer to a_sign->header.sign_pkey_size
+ * @return uint8_t* 
  */
 uint8_t* dap_sign_get_pkey(dap_sign_t *a_sign, size_t *a_pub_key_out)
 {
@@ -296,10 +312,12 @@ uint8_t* dap_sign_get_pkey(dap_sign_t *a_sign, size_t *a_pub_key_out)
 }
 
 /**
- * @brief dap_sign_get_pkey_hash
- * @param a_sign
- * @param a_sign_hash
- * @return
+ * @brief get SHA3 hash of buffer (a_sign), storing in output buffer a_sign_hash
+ * 
+ * @param a_sign input buffer
+ * @param a_sign_hash output buffer
+ * @return true 
+ * @return false 
  */
 bool dap_sign_get_pkey_hash(dap_sign_t *a_sign, dap_chain_hash_fast_t * a_sign_hash)
 {
@@ -314,7 +332,14 @@ bool dap_sign_get_pkey_hash(dap_sign_t *a_sign, dap_chain_hash_fast_t * a_sign_h
     return dap_hash_fast( a_sign->pkey_n_sign,a_sign->header.sign_pkey_size,a_sign_hash );
 }
 
-
+/**
+ * @brief verify, if a_sign->header.sign_pkey_size and a_sign->header.sign_size bigger, then a_max_key_size
+ * 
+ * @param a_sign signed data object 
+ * @param a_max_key_size max size of key
+ * @return true 
+ * @return false 
+ */
 bool dap_sign_verify_size(dap_sign_t *a_sign, size_t a_max_key_size)
 {
     if (a_sign->header.sign_pkey_size > a_max_key_size)
@@ -325,9 +350,10 @@ bool dap_sign_verify_size(dap_sign_t *a_sign, size_t a_max_key_size)
 }
 
 /**
- * @brief dap_sign_to_enc_key
- * @param a_chain_sign
- * @return
+ * @brief get deserealized pub key from dap_sign_t 
+ * 
+ * @param a_chain_sign dap_sign_t object
+ * @return dap_enc_key_t* 
  */
 dap_enc_key_t *dap_sign_to_enc_key(dap_sign_t * a_chain_sign)
 {
@@ -343,10 +369,10 @@ dap_enc_key_t *dap_sign_to_enc_key(dap_sign_t * a_chain_sign)
 }
 
 /**
- * @brief dap_sign_verify
- * @param a_chain_sign
- * @param a_data
- * @param a_data_size
+ * @brief dap_sign_verify data signature
+ * @param a_chain_sign dap_sign_t a_chain_sign object
+ * @param a_data const void * buffer with data
+ * @param a_data_size const size_t  buffer size
  * @return 1 valid signature, 0 invalid signature, -1 unsupported sign type
  */
 int dap_sign_verify(dap_sign_t * a_chain_sign, const void * a_data, const size_t a_data_size)
@@ -403,8 +429,12 @@ int dap_sign_verify(dap_sign_t * a_chain_sign, const void * a_data, const size_t
     return l_ret;
 }
 
+
 /**
- * Get size of struct dap_sign_t
+ * @brief Get size of struct dap_sign_t
+ * 
+ * @param a_chain_sign dap_sign_t object
+ * @return size_t 
  */
 size_t dap_sign_get_size(dap_sign_t * a_chain_sign)
 {
diff --git a/dap-sdk/net/core/dap_timerfd.c b/dap-sdk/net/core/dap_timerfd.c
index 9b6ff27f9b9b649e6ed4916de6fe73cbab6dffb8..044dca1e62f523d2a7a3aa9fef59f8fd45be9e4d 100644
--- a/dap-sdk/net/core/dap_timerfd.c
+++ b/dap-sdk/net/core/dap_timerfd.c
@@ -305,7 +305,8 @@ static void s_es_callback_timer(struct dap_events_socket *a_event_sock)
  * @param a_tfd
  * @param a_callback
  */
-void dap_timerfd_delete(dap_timerfd_t *l_timerfd)
+void dap_timerfd_delete(dap_timerfd_t *a_timerfd)
 {
-    dap_events_socket_remove_and_delete_mt(l_timerfd->events_socket->worker, l_timerfd->esocket_uuid);
+    if (a_timerfd->events_socket->worker)
+        dap_events_socket_remove_and_delete_mt(a_timerfd->events_socket->worker, a_timerfd->esocket_uuid);
 }
diff --git a/dap-sdk/net/stream/stream/dap_stream.c b/dap-sdk/net/stream/stream/dap_stream.c
index 9a33b5f97471092db8804bb33eec318f84927f9a..689c203b0a738d81c94a06ae416ab47204e14d22 100644
--- a/dap-sdk/net/stream/stream/dap_stream.c
+++ b/dap-sdk/net/stream/stream/dap_stream.c
@@ -820,7 +820,7 @@ static void s_stream_proc_pkt_in(dap_stream_t * a_stream)
         memcpy(l_ret_pkt.sig, c_dap_stream_sig, sizeof(l_ret_pkt.sig));
         dap_events_socket_write_unsafe(a_stream->esocket, &l_ret_pkt, sizeof(l_ret_pkt));
         // Reset client keepalive timer
-        if (a_stream->keepalive_timer) {
+        if (a_stream->keepalive_timer && a_stream->keepalive_timer->events_socket->worker) {
             void *l_arg = a_stream->keepalive_timer->callback_arg;
             dap_timerfd_delete(a_stream->keepalive_timer);
             a_stream->keepalive_timer = dap_timerfd_start_on_worker(a_stream->stream_worker->worker,
diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index 8a8b7387df4437c8e2d7ce39ce79a0e47e62950b..dc82cdf9c85eb73dbada1bd9021c6012478b30d3 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -991,7 +991,7 @@ void dap_chain_ledger_load_cache(dap_ledger_t *a_ledger)
     }
     dap_chain_global_db_objs_delete(l_objs, l_objs_count);
     DAP_DELETE(l_gdb_group);
-    if (l_objs_count == 0) {
+    if (l_objs_count == 0 || l_ledger_pvt->last_ticker.key == NULL) {
         l_ledger_pvt->last_ticker.found = true;
     }
 
@@ -1024,7 +1024,7 @@ void dap_chain_ledger_load_cache(dap_ledger_t *a_ledger)
     }
     dap_chain_global_db_objs_delete(l_objs, l_objs_count);
     DAP_DELETE(l_gdb_group);
-    if (l_objs_count == 0) {
+    if (l_objs_count == 0 || l_ledger_pvt->last_emit.hash == NULL) {
         l_ledger_pvt->last_emit.found = true;
     }
 
@@ -1039,12 +1039,12 @@ void dap_chain_ledger_load_cache(dap_ledger_t *a_ledger)
         memcpy(&l_tx_item->cache_data, l_objs[i].value, sizeof(l_tx_item->cache_data));
         HASH_ADD(hh, l_ledger_pvt->ledger_items, tx_hash_fast, sizeof(dap_chain_hash_fast_t), l_tx_item);
         if (i == l_objs_count - 1) {
-            PVT(a_ledger)->last_tx.hash = &l_tx_item->tx_hash_fast;
+            l_ledger_pvt->last_tx.hash = &l_tx_item->tx_hash_fast;
         }
     }
     dap_chain_global_db_objs_delete(l_objs, l_objs_count);
     DAP_DELETE(l_gdb_group);
-    if (l_objs_count == 0) {
+    if (l_objs_count == 0 || l_ledger_pvt->last_tx.hash == NULL) {
         l_ledger_pvt->last_tx.found = true;
     }
 
@@ -1058,12 +1058,12 @@ void dap_chain_ledger_load_cache(dap_ledger_t *a_ledger)
         memcpy(l_tx_item->tx, l_objs[i].value, l_objs[i].value_len);
         HASH_ADD(hh, l_ledger_pvt->treshold_txs, tx_hash_fast, sizeof(dap_chain_hash_fast_t), l_tx_item);
         if (i == l_objs_count - 1) {
-            PVT(a_ledger)->last_thres_tx.hash = &l_tx_item->tx_hash_fast;
+            l_ledger_pvt->last_thres_tx.hash = &l_tx_item->tx_hash_fast;
         }
     }
     dap_chain_global_db_objs_delete(l_objs, l_objs_count);
     DAP_DELETE(l_gdb_group);
-    if (l_objs_count == 0) {
+    if (l_objs_count == 0 || l_ledger_pvt->last_thres_tx.hash == NULL) {
         l_ledger_pvt->last_thres_tx.found = true;
     }
 
diff --git a/modules/common/include/dap_chain_common.h b/modules/common/include/dap_chain_common.h
index 807079680d020d03bfe04f03c0a750c25e7ef697..2b51b2f672ef12824ba868da6ecdabe97a5242ab 100644
--- a/modules/common/include/dap_chain_common.h
+++ b/modules/common/include/dap_chain_common.h
@@ -189,7 +189,7 @@ typedef union {
     serv_unit_enum_t enm;
 } dap_chain_net_srv_price_unit_uid_t;
 
-typedef enum dap_chain_tx_item_type {
+enum dap_chain_tx_item_type {
     TX_ITEM_TYPE_IN = 0x00, /// @brief  Transaction: inputs
     TX_ITEM_TYPE_OUT = 0x10, /// @brief  Transaction: outputs
     TX_ITEM_TYPE_OUT_EXT = 0x11,
@@ -203,7 +203,8 @@ typedef enum dap_chain_tx_item_type {
 
     TX_ITEM_TYPE_OUT_ALL = 0xfe,
     TX_ITEM_TYPE_ANY = 0xff
-} dap_chain_tx_item_type_t;
+};
+typedef byte_t dap_chain_tx_item_type_t;
 
 
 typedef struct dap_chain_receipt{
diff --git a/modules/common/include/dap_chain_datum_tx_in.h b/modules/common/include/dap_chain_datum_tx_in.h
index d52c76aac74bbb030412d864e881d6e1ead281b4..780c710c9aaa8d10cff8bd14b915b502121db4d8 100644
--- a/modules/common/include/dap_chain_datum_tx_in.h
+++ b/modules/common/include/dap_chain_datum_tx_in.h
@@ -34,7 +34,7 @@
 
 typedef struct dap_chain_tx_in{
     struct {
-        dap_chain_tx_item_type_t type:8; /// @param    type            @brief Transaction item type
+        dap_chain_tx_item_type_t type; /// @param    type            @brief Transaction item type
         dap_chain_hash_fast_t tx_prev_hash; /// @param tx_prev_hash    @brief Hash of the previous transaction. 0 for generation TX
         uint32_t tx_out_prev_idx; ///      @param   tx_prev_idx     @brief Previous tx_out index. 0 for generation TX
 //        dap_sign_type_t sig_type; /// Signature type
diff --git a/modules/common/include/dap_chain_datum_tx_out.h b/modules/common/include/dap_chain_datum_tx_out.h
index 24f8240a6fc37aaf163783b7700dc7d71323e00f..0e3b46b304977c592573f3055550969d4d3910e8 100644
--- a/modules/common/include/dap_chain_datum_tx_out.h
+++ b/modules/common/include/dap_chain_datum_tx_out.h
@@ -34,7 +34,7 @@
   */
 typedef struct dap_chain_tx_out{
     struct {
-        dap_chain_tx_item_type_t type:8; ///           @param    type            @brief  Transaction item type
+        dap_chain_tx_item_type_t type; ///           @param    type            @brief  Transaction item type
         uint64_t value; ///                       @param    value           @brief  Number of Datoshis ( DAP/10^9 ) to be transfered
     } header; /// Only header's hash is used for verification
     dap_chain_addr_t addr; ////
diff --git a/modules/common/include/dap_chain_datum_tx_out_cond.h b/modules/common/include/dap_chain_datum_tx_out_cond.h
index 3d96e7faf7f764e0020f5808048f57303c527630..9eec59aeac09b77f3dfece7dbebd5c604490a79f 100644
--- a/modules/common/include/dap_chain_datum_tx_out_cond.h
+++ b/modules/common/include/dap_chain_datum_tx_out_cond.h
@@ -29,12 +29,13 @@
 #include "dap_chain_common.h"
 #include "dap_chain_datum_tx.h"
 
-typedef enum dap_chain_tx_out_cond_subtype {
+enum dap_chain_tx_out_cond_subtype {
     DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY = 0x01,
     DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE = 0x02,
     DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE = 0x13,
     DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_UPDATE = 0xFA       // Virtual type for stake update verificator
-} dap_chain_tx_out_cond_subtype_t;
+};
+typedef byte_t dap_chain_tx_out_cond_subtype_t;
 
 DAP_STATIC_INLINE const char *dap_chain_tx_out_cond_subtype_to_str(dap_chain_tx_out_cond_subtype_t a_subtype){
     switch (a_subtype) {
@@ -53,9 +54,9 @@ DAP_STATIC_INLINE const char *dap_chain_tx_out_cond_subtype_to_str(dap_chain_tx_
 typedef struct dap_chain_tx_out_cond {
     struct {
         /// Transaction item type
-        dap_chain_tx_item_type_t item_type :8;
+        dap_chain_tx_item_type_t item_type;
         /// Condition subtype
-        dap_chain_tx_out_cond_subtype_t subtype : 8;
+        dap_chain_tx_out_cond_subtype_t subtype;
         /// Number of Datoshis ( DAP/10^9 ) to be reserver for service
         uint64_t value;
         /// When time expires this output could be used only by transaction owner
diff --git a/modules/common/include/dap_chain_datum_tx_out_ext.h b/modules/common/include/dap_chain_datum_tx_out_ext.h
index 536012bbd6226418cf05fd7dce55aa98dc19564d..5b23771a420a9171b856806e5dd7bba5f7d42990 100644
--- a/modules/common/include/dap_chain_datum_tx_out_ext.h
+++ b/modules/common/include/dap_chain_datum_tx_out_ext.h
@@ -35,7 +35,7 @@
   */
 typedef struct dap_chain_tx_out_ext{
     struct {
-        dap_chain_tx_item_type_t type : 8; // Transaction item type - should be TX_ITEM_TYPE_OUT_EXT
+        dap_chain_tx_item_type_t type;     // Transaction item type - should be TX_ITEM_TYPE_OUT_EXT
         uint64_t value;                    // Number of Datoshis ( DAP/10^9 ) to be transfered
     } header;                              // Only header's hash is used for verification
     dap_chain_addr_t addr;                 // Address to transfer to
diff --git a/modules/common/include/dap_chain_datum_tx_pkey.h b/modules/common/include/dap_chain_datum_tx_pkey.h
index 58a92b631a850e40e1ff1127cf51bab2678bd53f..cfea7b332887388ea590c365cfafff4136e939e1 100644
--- a/modules/common/include/dap_chain_datum_tx_pkey.h
+++ b/modules/common/include/dap_chain_datum_tx_pkey.h
@@ -33,7 +33,7 @@
   */
 typedef struct dap_chain_tx_pkey{
     struct {
-        dap_chain_tx_item_type_t type:8; /// @param    type            @brief Transaction item type
+        dap_chain_tx_item_type_t type; /// @param    type            @brief Transaction item type
         dap_sign_type_t sig_type; /// Signature type
         uint32_t sig_size; /// Signature size
     } header; /// Only header's hash is used for verification
diff --git a/modules/common/include/dap_chain_datum_tx_receipt.h b/modules/common/include/dap_chain_datum_tx_receipt.h
index f873a4d92761974639e2c6e8e9e81ce468f51258..4d5effd8f80da5095939b48a3490998c48b8cc33 100644
--- a/modules/common/include/dap_chain_datum_tx_receipt.h
+++ b/modules/common/include/dap_chain_datum_tx_receipt.h
@@ -32,7 +32,7 @@
  * @brief Transaction item out_cond
  */
 typedef struct dap_chain_datum_tx_receipt {
-    uint8_t type; //dap_chain_tx_item_type_t type :8; // Transaction item type
+    dap_chain_tx_item_type_t type; // Transaction item type
     dap_chain_receipt_info_t receipt_info; // Receipt itself
     uint16_t size;
     uint16_t exts_size;
diff --git a/modules/common/include/dap_chain_datum_tx_sig.h b/modules/common/include/dap_chain_datum_tx_sig.h
index 8265348babd74220775f53d5f38317ec6ca24b4a..8d6c4f27aa1f57d1f93a306c12c6c421bd325a09 100644
--- a/modules/common/include/dap_chain_datum_tx_sig.h
+++ b/modules/common/include/dap_chain_datum_tx_sig.h
@@ -35,8 +35,7 @@
   */
 typedef struct dap_chain_tx_sig{
     struct {
-        dap_chain_tx_item_type_t type:8; /// @param    type            @brief Transaction item type
-//        dap_sign_type_t sig_type; /// Signature type
+        dap_chain_tx_item_type_t type; /// @param    type            @brief Transaction item type
         uint32_t sig_size; /// Signature size
     } header; /// Only header's hash is used for verification
     uint8_t sig[]; /// @param sig @brief raw signature data
diff --git a/modules/common/include/dap_chain_datum_tx_token.h b/modules/common/include/dap_chain_datum_tx_token.h
index 65a99a10b3b80d7ea3eda10025e3e4e44f268ccc..f385363a12654da1b948bc462e7afd132bc47f4a 100644
--- a/modules/common/include/dap_chain_datum_tx_token.h
+++ b/modules/common/include/dap_chain_datum_tx_token.h
@@ -34,7 +34,7 @@
   */
 typedef struct dap_chain_tx_token{
     struct {
-        dap_chain_tx_item_type_t type:8;
+        dap_chain_tx_item_type_t type;
         char ticker[DAP_CHAIN_TICKER_SIZE_MAX];
         uint8_t padding; // Padding
         dap_chain_id_t token_emission_chain_id;
@@ -49,7 +49,7 @@ typedef struct dap_chain_tx_token{
   */
 typedef struct dap_chain_tx_token_ext{
     struct {
-        dap_chain_tx_item_type_t type:8;
+        dap_chain_tx_item_type_t type;
         uint8_t version;
         char ticker[DAP_CHAIN_TICKER_SIZE_MAX];
         uint8_t padding1; // Padding
diff --git a/modules/consensus/none/dap_chain_cs_none.c b/modules/consensus/none/dap_chain_cs_none.c
index 233377e230b7fd7c4809bfb420d71fbcec8e6d21..243565c6679c1020d1af546a45fd10ba26150637 100644
--- a/modules/consensus/none/dap_chain_cs_none.c
+++ b/modules/consensus/none/dap_chain_cs_none.c
@@ -96,7 +96,11 @@ static size_t s_chain_callback_datums_pool_proc_with_group(dap_chain_t * a_chain
 
 
 /**
- * Stub for consensus
+ * @brief stub for consensus
+ * 
+ * @param a_chain chain object
+ * @param a_chain_cfg chain config object
+ * @return int 
  */
 static int s_cs_callback_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
 {
@@ -119,14 +123,14 @@ int dap_chain_gdb_init(void)
 }
 
 /**
- * @brief s_history_callback_notify
- * @param a_arg
- * @param a_op_code
- * @param a_prefix
- * @param a_group
- * @param a_key
- * @param a_value
- * @param a_value_len
+ * @brief if current network in ONLINE state send to all connected node
+ * executes, when you add data to gdb chain (class=gdb in chain config)
+ * @param a_arg arguments. Can be network object (dap_chain_net_t)
+ * @param a_op_code object type (f.e. l_net->type from dap_store_obj)
+ * @param a_group group, for example "chain-gdb.home21-network.chain-F"
+ * @param a_key key hex value, f.e. 0x12EFA084271BAA5EEE93B988E73444B76B4DF5F63DADA4B300B051E29C2F93
+ * @param a_value buffer with data
+ * @param a_value_len buffer size
  */
 static void s_history_callback_notify(void * a_arg, const char a_op_code, const char * a_group,
         const char * a_key, const void * a_value, const size_t a_value_size)
@@ -141,15 +145,22 @@ static void s_history_callback_notify(void * a_arg, const char a_op_code, const
     }
 }
 
+/**
+ * @brief set PVT(DAP_CHAIN_GDB(a_chain))->is_load_mode = true
+ * 
+ * @param a_chain dap_chain_t object
+ */
 static void s_dap_chain_gdb_callback_purge(dap_chain_t *a_chain)
 {
     PVT(DAP_CHAIN_GDB(a_chain))->is_load_mode = true;
 }
 
 /**
- * @brief dap_chain_gdb_new
- * @param a_chain
- * @param a_chain_cfg
+ * @brief configure chain gdb
+ * Set atom element callbacks
+ * @param a_chain dap_chain_t chain object
+ * @param a_chain_cfg dap_config_t config object 
+ * @return int 
  */
 int dap_chain_gdb_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
 {
@@ -208,9 +219,9 @@ int dap_chain_gdb_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
 }
 
 /**
- * @brief dap_chain_cs_gdb_delete
- * @param a_chain
- * @return
+ * @brief clear dap_chain_gdb_t object
+ * 
+ * @param a_chain dap_chain_t chain object
  */
 void dap_chain_gdb_delete(dap_chain_t * a_chain)
 {
@@ -224,9 +235,10 @@ void dap_chain_gdb_delete(dap_chain_t * a_chain)
 }
 
 /**
- * @brief dap_chain_gdb_get_group
- * @param a_chain
- * @return group name for ledger
+ * @brief get group name for ledger
+ * 
+ * @param a_chain dap_chain_t * chain object
+ * @return const char*
  */
 const char* dap_chain_gdb_get_group(dap_chain_t * a_chain)
 {
@@ -256,10 +268,13 @@ const char* dap_chain_gdb_get_group(dap_chain_t * a_chain)
     return 1;
 }*/
 
+
 /**
- * Load ledger from mempool
- *
- * return 0 if OK otherwise  negative error code
+ * @brief Load ledger from mempool
+ * 
+ * @param a_gdb_group a_gdb_group char gdb group name
+ * @param a_chain chain dap_chain_t object
+ * @return int return 0 if OK otherwise  negative error code
  */
 int dap_chain_gdb_ledger_load(char *a_gdb_group, dap_chain_t *a_chain)
 {
@@ -276,10 +291,12 @@ int dap_chain_gdb_ledger_load(char *a_gdb_group, dap_chain_t *a_chain)
 }
 
 /**
- * @brief s_chain_callback_datums_add
- * @param a_chain
- * @param a_datums
- * @param a_datums_size
+ * @brief call s_chain_callback_atom_add for every dap_chain_datum_t objects in a_datums array
+ * 
+ * @param a_chain dap_chain_t chain object (f.e. plasma)
+ * @param a_datums dap_chain_datum array with dap_chain_datum objects
+ * @param a_datums_count object counts in datums array
+ * @return size_t 
  */
 static size_t s_chain_callback_datums_pool_proc(dap_chain_t * a_chain, dap_chain_datum_t ** a_datums,
         size_t a_datums_count)
@@ -291,6 +308,15 @@ static size_t s_chain_callback_datums_pool_proc(dap_chain_t * a_chain, dap_chain
     return a_datums_count;
 }
 
+/**
+ * @brief call s_chain_callback_atom_add for every dap_chain_datum_t objects in a_datums array only if chain contains specific group (chain-gdb.home21-network.chain-F)
+ * 
+ * @param a_chain dap_chain_t chain object (f.e. plasma)
+ * @param a_datums dap_chain_datum array with dap_chain_datum objects
+ * @param a_datums_count object counts in datums array
+ * @param a_group group name
+ * @return size_t 
+ */
 static size_t s_chain_callback_datums_pool_proc_with_group(dap_chain_t * a_chain, dap_chain_datum_t ** a_datums,
         size_t a_datums_count, const char *a_group)
 {
@@ -300,10 +326,12 @@ static size_t s_chain_callback_datums_pool_proc_with_group(dap_chain_t * a_chain
 }
 
 /**
- * @brief s_chain_callback_datums_add
- * @param a_chain
- * @param a_datums
- * @param a_datums_size
+ * @brief add atom to DB
+ * 
+ * @param a_chain chaon object
+ * @param a_atom pointer to atom
+ * @param a_atom_size atom size
+ * @return dap_chain_atom_verify_res_t 
  */
 static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t a_atom, size_t a_atom_size)
 {
@@ -352,11 +380,14 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
     return ATOM_ACCEPT;
 }
 
+
 /**
- * @brief s_chain_callback_atom_verify Verify atomic element
- * @param a_chain
- * @param a_atom
- * @return
+ * @brief Verify atomic element (currently simply return ATOM_ACCEPT)
+ * 
+ * @param a_chain chain object
+ * @param a_atom pointer to atom
+ * @param a_atom_size size of atom
+ * @return dap_chain_atom_verify_res_t 
  */
 static dap_chain_atom_verify_res_t s_chain_callback_atom_verify(dap_chain_t * a_chain, dap_chain_atom_ptr_t a_atom, size_t a_atom_size)
 {
@@ -368,9 +399,9 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_verify(dap_chain_t * a_
 
 
 /**
- * @brief s_chain_callback_atom_get_static_hdr_size
- * @param a_chain
- * @return
+ * @brief return size of dap_chain_datum_t l_datum_null->header
+ * 
+ * @return size_t 
  */
 static size_t s_chain_callback_atom_get_static_hdr_size()
 {
@@ -378,23 +409,28 @@ static size_t s_chain_callback_atom_get_static_hdr_size()
     return sizeof(l_datum_null->header);
 }
 
+
 /**
- * @brief s_chain_callback_atom_iter_create Create atomic element iterator
- * @param a_chain
- * @return
+ * @brief Create atomic element iterator
+ * 
+ * @param a_chain dap_chain_t a_chain
+ * @return dap_chain_atom_iter_t* 
  */
 static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain)
 {
     dap_chain_atom_iter_t * l_iter = DAP_NEW_Z(dap_chain_atom_iter_t);
     l_iter->chain = a_chain;
+    l_iter->cur_hash = DAP_NEW(dap_chain_hash_fast_t);
     return l_iter;
 }
 
 /**
- * @brief s_chain_callback_atom_iter_create_from
- * @param a_chain
- * @param a_atom
- * @return
+ * @brief create atom object (dap_chain_atom_iter_t)
+ * 
+ * @param a_chain chain object
+ * @param a_atom pointer to atom
+ * @param a_atom_size size of atom
+ * @return dap_chain_atom_iter_t* 
  */
 static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create_from(dap_chain_t * a_chain,
         dap_chain_atom_ptr_t a_atom, size_t a_atom_size)
@@ -403,24 +439,32 @@ static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create_from(dap_chain_t
     l_iter->chain = a_chain;
     l_iter->cur = a_atom;
     l_iter->cur_size = a_atom_size;
+    dap_hash_fast(a_atom, a_atom_size, l_iter->cur_hash);
     return l_iter;
 }
 
+
 /**
- * @brief s_chain_callback_atom_iter_delete Delete dag event iterator
- * @param a_atom_iter
+ * @brief Delete dag event iterator
+ * execute DAP_DELETE(a_atom_iter)
+ * @param a_atom_iter dap_chain_atom_iter_t object
  */
 static void s_chain_callback_atom_iter_delete(dap_chain_atom_iter_t * a_atom_iter)
 {
+    if (a_atom_iter->cur_item)
+        DAP_DELETE(a_atom_iter->cur_item);
+    DAP_DELETE(a_atom_iter->cur_hash);
     DAP_DELETE(a_atom_iter);
 }
 
+
 /**
- * @brief s_chain_callback_atom_iter_find_by_hash
- * @details Searchs by datum data hash, not for datum's hash itself
- * @param a_atom_iter
- * @param a_atom_hash
- * @return
+ * @brief get dap_chain_atom_ptr_t object form database by hash
+ * @details Searchs by datum data hash, not for datum's hash itself 
+ * @param a_atom_iter dap_chain_atom_iter_t atom object 
+ * @param a_atom_hash dap_chain_hash_fast_t atom hash
+ * @param a_atom_size size of atom object
+ * @return dap_chain_atom_ptr_t 
  */
 static dap_chain_atom_ptr_t s_chain_callback_atom_iter_find_by_hash(dap_chain_atom_iter_t * a_atom_iter,
         dap_chain_hash_fast_t * a_atom_hash, size_t *a_atom_size)
@@ -436,59 +480,81 @@ static dap_chain_atom_ptr_t s_chain_callback_atom_iter_find_by_hash(dap_chain_at
 }
 
 /**
- * @brief s_chain_callback_atom_iter_get_first Get the first dag event
- * @param a_atom_iter
- * @return
+ * @brief Get the first dag event from database
+ * 
+ * @param a_atom_iter ap_chain_atom_iter_t object 
+ * @param a_atom_size a_atom_size atom size
+ * @return dap_chain_atom_ptr_t 
  */
 static dap_chain_atom_ptr_t s_chain_callback_atom_iter_get_first(dap_chain_atom_iter_t * a_atom_iter, size_t *a_atom_size)
 {
     if (!a_atom_iter)
         return NULL;
     dap_chain_datum_t * l_datum = NULL;
-    a_atom_iter->cur_item = PVT ( DAP_CHAIN_GDB(a_atom_iter->chain) )->hash_items;
+    dap_chain_gdb_datum_hash_item_t *l_item = PVT(DAP_CHAIN_GDB(a_atom_iter->chain))->hash_items;
+    a_atom_iter->cur_item = l_item;
     if (a_atom_iter->cur_item ){
-        dap_chain_gdb_datum_hash_item_t * l_item = PVT ( DAP_CHAIN_GDB(a_atom_iter->chain) )->hash_items;
         size_t l_datum_size =0;
-        l_datum= (dap_chain_datum_t*) dap_chain_global_db_gr_get(l_item->key,&l_datum_size,PVT(DAP_CHAIN_GDB(a_atom_iter->chain))->group_datums );
+        l_datum= (dap_chain_datum_t*) dap_chain_global_db_gr_get(l_item->key, &l_datum_size,
+                                                                 PVT(DAP_CHAIN_GDB(a_atom_iter->chain))->group_datums );
         if (a_atom_iter->cur) // This iterator should clean up data for it because its allocate it
             DAP_DELETE( a_atom_iter->cur);
         a_atom_iter->cur = l_datum;
+        a_atom_iter->cur_size = l_datum_size;
+        dap_chain_hash_fast_from_str(l_item->key, a_atom_iter->cur_hash);
         if (a_atom_size)
             *a_atom_size = l_datum_size;
-    } else if (a_atom_size)
-        *a_atom_size = 0;
+    } else {
+        DAP_DEL_Z(a_atom_iter->cur);
+        a_atom_iter->cur_size = 0;
+        if (a_atom_size)
+            *a_atom_size = 0;
+    }
     return l_datum;
 }
 
+
 /**
- * @brief s_chain_callback_atom_iter_get_next Get the next dag event
- * @param a_atom_iter
- * @return
+ * @brief Get the next dag event from database
+ * 
+ * @param a_atom_iter dap_chain_atom_iter_t
+ * @param a_atom_size size_t a_atom_size
+ * @return dap_chain_atom_ptr_t 
  */
-static dap_chain_atom_ptr_t s_chain_callback_atom_iter_get_next(dap_chain_atom_iter_t * a_atom_iter,size_t *a_atom_size)
+static dap_chain_atom_ptr_t s_chain_callback_atom_iter_get_next(dap_chain_atom_iter_t *a_atom_iter, size_t *a_atom_size)
 {
     dap_chain_datum_t * l_datum = NULL;
-    a_atom_iter->cur_item = a_atom_iter->cur_item?
-                ((dap_chain_gdb_datum_hash_item_t*) a_atom_iter->cur_item)->next : NULL;
+    dap_chain_gdb_datum_hash_item_t *l_item = (dap_chain_gdb_datum_hash_item_t*)a_atom_iter->cur_item;
+    if (l_item)
+        l_item = l_item->next;
+    a_atom_iter->cur_item = l_item;
     if (a_atom_iter->cur_item ){
         size_t l_datum_size =0;
-        l_datum= (dap_chain_datum_t*) dap_chain_global_db_gr_get(
-                                ((dap_chain_gdb_datum_hash_item_t*) a_atom_iter->cur_item)->key,
-                                &l_datum_size, PVT(DAP_CHAIN_GDB(a_atom_iter->chain))->group_datums );
+        l_datum = (dap_chain_datum_t *)dap_chain_global_db_gr_get(l_item->key, &l_datum_size,
+                                                                  PVT(DAP_CHAIN_GDB(a_atom_iter->chain))->group_datums);
         if (a_atom_iter->cur) // This iterator should clean up data for it because its allocate it
-            DAP_DELETE( a_atom_iter->cur);
+            DAP_DELETE(a_atom_iter->cur);
         a_atom_iter->cur = l_datum;
-        *a_atom_size = l_datum_size;
-    }else
-        *a_atom_size = 0;
+        a_atom_iter->cur_size = l_datum_size;
+        dap_chain_hash_fast_from_str(l_item->key, a_atom_iter->cur_hash);
+        if (a_atom_size)
+            *a_atom_size = l_datum_size;
+    } else {
+        DAP_DEL_Z(a_atom_iter->cur);
+        a_atom_iter->cur_size = 0;
+        if (a_atom_size)
+            *a_atom_size = 0;
+    }
     return l_datum;
 }
 
 /**
- * @brief s_chain_callback_atom_iter_get_links
- * @param a_atom_iter
- * @param a_links_size_ptr
- * @return
+ * @brief return null in current implementation
+ * 
+ * @param a_atom_iter 
+ * @param a_links_size_ptr 
+ * @param a_links_sizes_ptr 
+ * @return dap_chain_atom_ptr_t* 
  */
 static dap_chain_atom_ptr_t* s_chain_callback_atom_iter_get_links(dap_chain_atom_iter_t * a_atom_iter,
         size_t * a_links_size_ptr, size_t **a_links_sizes_ptr)
@@ -500,10 +566,12 @@ static dap_chain_atom_ptr_t* s_chain_callback_atom_iter_get_links(dap_chain_atom
 }
 
 /**
- * @brief s_chain_callback_atom_iter_get_lasts
- * @param a_atom_iter
- * @param a_lasts_size_ptr
- * @return
+ * @brief return null in current implementation
+ * 
+ * @param a_atom_iter 
+ * @param a_lasts_size_ptr 
+ * @param a_links_sizes_ptr 
+ * @return dap_chain_atom_ptr_t* 
  */
 static dap_chain_atom_ptr_t* s_chain_callback_atom_iter_get_lasts(dap_chain_atom_iter_t * a_atom_iter,
         size_t * a_lasts_size_ptr,  size_t **a_links_sizes_ptr)
@@ -514,6 +582,14 @@ static dap_chain_atom_ptr_t* s_chain_callback_atom_iter_get_lasts(dap_chain_atom
     return NULL;
 }
 
+/**
+ * @brief get new datum object from atom
+ * 
+ * @param a_atom atom object
+ * @param a_atom_size atom size
+ * @param a_datums_count count of datums
+ * @return dap_chain_datum_t** 
+ */
 static dap_chain_datum_t **s_chain_callback_atom_get_datum(dap_chain_atom_ptr_t a_atom, size_t a_atom_size, size_t *a_datums_count)
 {
     UNUSED(a_atom_size);
diff --git a/modules/global-db/dap_chain_global_db_driver_pgsql.c b/modules/global-db/dap_chain_global_db_driver_pgsql.c
index 1232f9837bb27b5d8b2b5a7388cf25cfaaa7e98c..2722bed4207fec3501af157dd2c53a488e241a83 100644
--- a/modules/global-db/dap_chain_global_db_driver_pgsql.c
+++ b/modules/global-db/dap_chain_global_db_driver_pgsql.c
@@ -191,7 +191,7 @@ int dap_db_driver_pgsql_init(const char *a_filename_dir, dap_db_driver_callbacks
 }
 
 /**
- * @brief Deinitializes a SQLite database.
+ * @brief Deinitializes a PostgreSQL database.
  * 
  * @return Returns 0 if successful.
  */
@@ -206,7 +206,7 @@ int dap_db_driver_pgsql_deinit(void)
 }
 
 /**
- * @brief Starts a transaction.
+ * @brief Starts a transaction in a PostgreSQL database.
  * 
  * @return Returns 0 if successful, otherwise -1.
  */
@@ -227,7 +227,7 @@ int dap_db_driver_pgsql_start_transaction(void)
 }
 
 /**
- * @brief Starts a transaction in a PostgreSQL database.
+ * @brief Ends a transaction in a PostgreSQL database.
  * 
  * @return Returns 0 if successful, otherwise -1.
  */
diff --git a/modules/global-db/dap_chain_global_db_remote.c b/modules/global-db/dap_chain_global_db_remote.c
index 3c51d5bec51b247045e1f4041e8fb7957ed6162f..e1c5d27c1309c8cfacb2a4938f3cb622d5865d42 100644
--- a/modules/global-db/dap_chain_global_db_remote.c
+++ b/modules/global-db/dap_chain_global_db_remote.c
@@ -11,7 +11,7 @@
 
 #define LOG_TAG "dap_chain_global_db_remote"
 
-// default time of node address expired in hours
+// Default time of a node address expired in hours
 #define NODE_TIME_EXPIRED_DEFAULT 720
 
 /**
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 467ce31008b6e190b5d5226d3a8fe78415568c51..7f162283f3d75df03394617c1a256a4d5bc943f2 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -255,7 +255,59 @@ static uint8_t *dap_chain_net_set_acl(dap_chain_hash_fast_t *a_pkey_hash);
 
 static dap_global_db_obj_callback_notify_t s_srv_callback_notify = NULL;
 
+/**
+ * @brief
+ * init network settings from cellrame-node.cfg file
+ * register net* commands in cellframe-node-cli interface
+ * @return
+ */
+int dap_chain_net_init()
+{
+    dap_chain_node_client_init();
+    dap_chain_node_cli_cmd_item_create ("net", s_cli_net, "Network commands",
+        "net list [chains -n <chain net name>]"
+            "\tList all networks or list all chains in selected network"
+        "net -net <chain net name> [-mode update|all] go < online | offline >\n"
+            "\tFind and establish links and stay online. \n"
+            "\tMode \"update\" is by default when only new chains and gdb are updated. Mode \"all\" updates everything from zero\n"
+        "net -net <chain net name> get status\n"
+            "\tLook at current status\n"
+        "net -net <chain net name> stats tx [-from <From time>] [-to <To time>] [-prev_sec <Seconds>] \n"
+            "\tTransactions statistics. Time format is <Year>-<Month>-<Day>_<Hours>:<Minutes>:<Seconds> or just <Seconds> \n"
+        "net -net <chain net name> [-mode update|all] sync < all | gdb | chains >\n"
+            "\tSyncronyze gdb, chains or everything\n"
+            "\tMode \"update\" is by default when only new chains and gdb are updated. Mode \"all\" updates everything from zero\n"
+        "net -net <chain net name> link < list | add | del | info | establish >\n"
+            "\tList, add, del, dump or establish links\n"
+        "net -net <chain net name> ca add {-cert <cert name> | -hash <cert hash>}\n"
+            "\tAdd certificate to list of authority cetificates in GDB group\n"
+        "net -net <chain net name> ca list\n"
+            "\tPrint list of authority cetificates from GDB group\n"
+        "net -net <chain net name> ca del -hash <cert hash> [-H hex|base58(default)]\n"
+            "\tDelete certificate from list of authority cetificates in GDB group by it's hash\n"
+        "net -net <chain net name> ledger reload\n"
+            "\tPurge the cache of chain net ledger and recalculate it from chain file\n"                                        );
+    s_seed_mode = dap_config_get_item_bool_default(g_config,"general","seed_mode",false);
+
+    // maximum number of connections to other nodes
+    s_max_links_count = dap_config_get_item_int32_default(g_config, "general", "max_links", s_max_links_count);
+    // required number of connections to other nodes
+    s_required_links_count = dap_config_get_item_int32_default(g_config, "general", "require_links", s_required_links_count);
+    s_debug_more = dap_config_get_item_bool_default(g_config,"chain_net","debug_more",false);
+
+    dap_chain_net_load_all();
+
+    dap_enc_http_set_acl_callback(dap_chain_net_set_acl);
+    log_it(L_NOTICE,"Chain networks initialized");
+    return 0;
+}
 
+/**
+ * @brief get certificate hash from chain config [acl_accept_ca_gdb] param
+ * 
+ * @param a_net dap_chain_net_t chain object
+ * @return char* 
+ */
 char *dap_chain_net_get_gdb_group_acl(dap_chain_net_t *a_net)
 {
     if (a_net) {
@@ -273,9 +325,10 @@ char *dap_chain_net_get_gdb_group_acl(dap_chain_net_t *a_net)
 }
 
 /**
- * @brief s_net_state_to_str
- * @param l_state
- * @return
+ * @brief convert dap_chain_net_state_t net state object to string
+ * 
+ * @param l_state dap_chain_net_state_t
+ * @return const char* 
  */
 inline static const char * s_net_state_to_str(dap_chain_net_state_t l_state)
 {
@@ -283,9 +336,11 @@ inline static const char * s_net_state_to_str(dap_chain_net_state_t l_state)
 }
 
 /**
- * @brief dap_chain_net_state_go_to
- * @param a_net
- * @param a_new_state
+ * @brief set current network state to F_DAP_CHAIN_NET_GO_SYNC
+ * 
+ * @param a_net dap_chain_net_t network object
+ * @param a_new_state dap_chain_net_state_t new network state
+ * @return int 
  */
 int dap_chain_net_state_go_to(dap_chain_net_t * a_net, dap_chain_net_state_t a_new_state)
 {
@@ -308,12 +363,26 @@ int dap_chain_net_state_go_to(dap_chain_net_t * a_net, dap_chain_net_state_t a_n
     return 0;
 }
 
-
+/**
+ * @brief set s_srv_callback_notify
+ * 
+ * @param a_callback dap_global_db_obj_callback_notify_t callback function
+ */
 void dap_chain_net_set_srv_callback_notify(dap_global_db_obj_callback_notify_t a_callback)
 {
     s_srv_callback_notify = a_callback;
 }
 
+/**
+ * @brief if current network in ONLINE state send to all connected node
+ * executes, when you add data to gdb chain (class=gdb in chain config)
+ * @param a_arg arguments. Can be network object (dap_chain_net_t)
+ * @param a_op_code object type (f.e. l_net->type from dap_store_obj)
+ * @param a_group group, for example "chain-gdb.home21-network.chain-F"
+ * @param a_key key hex value, f.e. 0x12EFA084271BAA5EEE93B988E73444B76B4DF5F63DADA4B300B051E29C2F93
+ * @param a_value buffer with data
+ * @param a_value_len buffer size
+ */
 void dap_chain_net_sync_gdb_broadcast(void *a_arg, const char a_op_code, const char *a_group,
                                       const char *a_key, const void *a_value, const size_t a_value_len)
 {
@@ -358,14 +427,14 @@ void dap_chain_net_sync_gdb_broadcast(void *a_arg, const char a_op_code, const c
 }
 
 /**
- * @brief s_gbd_history_callback_notify
- * @param a_arg
- * @param a_op_code
- * @param a_prefix
- * @param a_group
- * @param a_key
- * @param a_value
- * @param a_value_len
+ * @brief added like callback in dap_chain_global_db_add_sync_group
+ * 
+ * @param a_arg arguments. Can be network object (dap_chain_net_t)
+ * @param a_op_code object type (f.e. l_net->type from dap_store_obj)
+ * @param a_group group, for example "chain-gdb.home21-network.chain-F"
+ * @param a_key key hex value, f.e. 0x12EFA084271BAA5EEE93B988E73444B76B4DF5F63DADA4B300B051E29C2F93
+ * @param a_value buffer with data
+ * @param a_value_len buffer size
  */
 static void s_gbd_history_callback_notify (void * a_arg, const char a_op_code, const char * a_group,
                                                      const char * a_key, const void * a_value, const size_t a_value_len)
@@ -986,6 +1055,8 @@ dap_chain_node_role_t dap_chain_net_get_role(dap_chain_net_t * a_net)
 static dap_chain_net_t *s_net_new(const char * a_id, const char * a_name ,
                                     const char * a_node_role)
 {
+    if (!a_id || !a_name || !a_node_role)
+        return NULL;
     dap_chain_net_t *ret = DAP_NEW_Z_SIZE( dap_chain_net_t, sizeof(ret->pub) + sizeof(dap_chain_net_pvt_t) );
     ret->pub.name = strdup( a_name );
 
@@ -1057,56 +1128,6 @@ void dap_chain_net_delete( dap_chain_net_t * a_net )
 }
 
 
-/**
- * @brief
- * init network settings from cellrame-node.cfg file
- * register net* commands in cellframe-node-cli interface
- * @return
- */
-int dap_chain_net_init()
-{
-    dap_stream_ch_chain_init();
-    dap_stream_ch_chain_net_init();
-
-    dap_chain_node_client_init();
-    dap_chain_node_cli_cmd_item_create ("net", s_cli_net, "Network commands",
-        "net list [chains -n <chain net name>]"
-            "\tList all networks or list all chains in selected network"
-        "net -net <chain net name> [-mode update|all] go < online | offline >\n"
-            "\tFind and establish links and stay online. \n"
-            "\tMode \"update\" is by default when only new chains and gdb are updated. Mode \"all\" updates everything from zero\n"
-        "net -net <chain net name> get status\n"
-            "\tLook at current status\n"
-        "net -net <chain net name> stats tx [-from <From time>] [-to <To time>] [-prev_sec <Seconds>] \n"
-            "\tTransactions statistics. Time format is <Year>-<Month>-<Day>_<Hours>:<Minutes>:<Seconds> or just <Seconds> \n"
-        "net -net <chain net name> [-mode update|all] sync < all | gdb | chains >\n"
-            "\tSyncronyze gdb, chains or everything\n"
-            "\tMode \"update\" is by default when only new chains and gdb are updated. Mode \"all\" updates everything from zero\n"
-        "net -net <chain net name> link < list | add | del | info | establish >\n"
-            "\tList, add, del, dump or establish links\n"
-        "net -net <chain net name> ca add {-cert <cert name> | -hash <cert hash>}\n"
-            "\tAdd certificate to list of authority cetificates in GDB group\n"
-        "net -net <chain net name> ca list\n"
-            "\tPrint list of authority cetificates from GDB group\n"
-        "net -net <chain net name> ca del -hash <cert hash> [-H hex|base58(default)]\n"
-            "\tDelete certificate from list of authority cetificates in GDB group by it's hash\n"
-        "net -net <chain net name> ledger reload\n"
-            "\tPurge the cache of chain net ledger and recalculate it from chain file\n"                                        );
-    s_seed_mode = dap_config_get_item_bool_default(g_config,"general","seed_mode",false);
-
-    // maximum number of connections to other nodes
-    s_max_links_count = dap_config_get_item_int32_default(g_config, "general", "max_links", s_max_links_count);
-    // required number of connections to other nodes
-    s_required_links_count = dap_config_get_item_int32_default(g_config, "general", "require_links", s_required_links_count);
-    s_debug_more = dap_config_get_item_bool_default(g_config,"chain_net","debug_more",false);
-
-    dap_chain_net_load_all();
-
-    dap_enc_http_set_acl_callback(dap_chain_net_set_acl);
-    log_it(L_NOTICE,"Chain networks initialized");
-    return 0;
-}
-
 /**
  * @brief 
  * load network config settings
@@ -1204,14 +1225,13 @@ static int s_cli_net(int argc, char **argv, char **a_str_reply)
     // command 'list'
     const char * l_list_cmd = NULL;
 
-    if(dap_chain_node_cli_find_option_val(argv, arg_index, argc, "list", &l_list_cmd) != 0 ) {
+    if(dap_chain_node_cli_find_option_val(argv, arg_index, min(argc, arg_index + 1), "list", &l_list_cmd) != 0 ) {
         dap_string_t *l_string_ret = dap_string_new("");
         if (dap_strcmp(l_list_cmd,"chains")==0){
             const char * l_net_str = NULL;
             dap_chain_net_t* l_net = NULL;
             dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-net", &l_net_str);
-            dap_chain_node_cli_find_option_val(argv, arg_index, argc, "--net", &l_net_str);
-            dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-n", &l_net_str);
+
             l_net = dap_chain_net_by_name(l_net_str);
 
             if (l_net){
@@ -1239,12 +1259,12 @@ static int s_cli_net(int argc, char **argv, char **a_str_reply)
             }
 
         }else{
-            dap_string_append(l_string_ret,"Networks:\n ");
+            dap_string_append(l_string_ret,"Networks:\n");
             // show list of nets
             dap_chain_net_item_t * l_net_item, *l_net_item_tmp;
             int l_net_i = 0;
             HASH_ITER(hh, s_net_items, l_net_item, l_net_item_tmp){
-                dap_string_append_printf(l_string_ret, "%s\n", l_net_item->name);
+                dap_string_append_printf(l_string_ret, "\t%s\n", l_net_item->name);
                 l_net_i++;
             }
             dap_string_append(l_string_ret, "\n");
@@ -1612,11 +1632,11 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx)
                                             dap_config_get_item_str(l_cfg , "general" , "name" ),
                                             dap_config_get_item_str(l_cfg , "general" , "node-role" )
                                            );
-        dap_chain_net_pvt_t * l_net_pvt = PVT(l_net);
         if(!l_net) {
             log_it(L_ERROR,"Can't create l_net");
             return -1;
         }
+        dap_chain_net_pvt_t * l_net_pvt = PVT(l_net);
         l_net_pvt->load_mode = true;
         l_net_pvt->acl_idx = a_acl_idx;
         l_net->pub.gdb_groups_prefix = dap_strdup (
@@ -2894,6 +2914,14 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
     }
 }
 
+/**
+ * @brief check certificate access list, written in chain config
+ * 
+ * @param a_net - network object
+ * @param a_pkey_hash - certificate hash
+ * @return true 
+ * @return false 
+ */
 static bool s_net_check_acl(dap_chain_net_t *a_net, dap_chain_hash_fast_t *a_pkey_hash)
 {
     const char l_path[] = "network/";
@@ -2954,6 +2982,12 @@ static bool s_net_check_acl(dap_chain_net_t *a_net, dap_chain_hash_fast_t *a_pke
     return l_authorized;
 }
 
+/**
+ * @brief s_acl_callback function. Usually called from enc_http_proc
+ * set acl (l_enc_key_ks->acl_list) from acl_accept_ca_list, acl_accept_ca_gdb chain config parameters in [auth] section
+ * @param a_pkey_hash dap_chain_hash_fast_t hash object
+ * @return uint8_t* 
+ */
 static uint8_t *dap_chain_net_set_acl(dap_chain_hash_fast_t *a_pkey_hash)
 {
     uint16_t l_net_count;
diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c
index 09745c70f49314a71740572eead1de2d47bfb82c..40159b3fc946b36859fc5f667f53e03d6164ae55 100644
--- a/modules/net/dap_chain_node_cli.c
+++ b/modules/net/dap_chain_node_cli.c
@@ -1085,8 +1085,8 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
     dap_chain_node_cli_cmd_item_create ("tx_cond_create", com_tx_cond_create, "Make cond transaction",
             "tx_cond_create -net <net name> -token <token_ticker> -wallet_f <wallet_from> -wallet_t <wallet_to>"
                                         "-value <value_datoshi> -unit <mb|kb|b|sec|day> -service <vpn>\n" );
-    dap_chain_node_cli_cmd_item_create ("tx_verify", com_tx_verify, "Verifing transaction",
-            "tx_verify  -wallet <wallet name> \n" );
+    dap_chain_node_cli_cmd_item_create ("tx_verify", com_tx_verify, "Verifing transaction in mempool",
+            "tx_verify -net <net name> -chain <chain name> -tx <tx_hash>\n" );
 
     // Transaction history
     dap_chain_node_cli_cmd_item_create("tx_history", com_tx_history, "Transaction history (for address or by hash)",
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 18a5f26afc890236658fe13261e230404aacec45..652309a265c9322b8aa177542365fc828ec184b0 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -2502,7 +2502,7 @@ int com_token_update(int a_argc, char ** a_argv, char ** a_str_reply)
 
     switch(l_type){
         case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE:{
-            dap_list_t *l_tsd_list = dap_list_alloc();
+            dap_list_t *l_tsd_list = NULL;
             size_t l_tsd_total_size = 0;
             l_arg_index++;
             while (l_arg_index<a_argc-1){
@@ -3357,6 +3357,7 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
 
     // create first transaction (with tx_token)
     dap_chain_datum_tx_t *l_tx = DAP_NEW_Z_SIZE(dap_chain_datum_tx_t, sizeof(dap_chain_datum_tx_t));
+    l_tx->header.ts_created = time(NULL);
     dap_chain_hash_fast_t l_tx_prev_hash = { 0 };
     // create items
     dap_chain_tx_token_t *l_tx_token = dap_chain_datum_tx_item_token_create(&l_emission_hash, l_ticker);
@@ -3368,7 +3369,6 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
     dap_chain_datum_tx_add_item(&l_tx, (const uint8_t*) l_in);
     dap_chain_datum_tx_add_item(&l_tx, (const uint8_t*) l_out);
 
-    // Base tx don't need signature items but let it be
     if (l_certs){
         // Sign all that we have with certs
         for(size_t i = 0; i < l_certs_size; i++) {
@@ -3961,15 +3961,48 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
  * @param str_reply 
  * @return int 
  */
-int com_tx_verify(int argc, char ** argv, char **str_reply)
+int com_tx_verify(int a_argc, char **a_argv, char **a_str_reply)
 {
-    if(argc > 1) {
-        if(str_reply)
-            dap_chain_node_cli_set_reply_text(str_reply, "command \"%s\" not recognized", argv[1]);
+    const char * l_tx_hash_str = NULL;
+    dap_chain_net_t * l_net = NULL;
+    dap_chain_t * l_chain = NULL;
+    int l_arg_index = 1;
+
+    dap_chain_node_cli_find_option_val(a_argv, l_arg_index, a_argc, "-tx", &l_tx_hash_str);
+    if(!l_tx_hash_str) {
+        dap_chain_node_cli_set_reply_text(a_str_reply, "tx_verify requires parameter '-tx'");
+        return -1;
     }
-    else if(str_reply)
-        dap_chain_node_cli_set_reply_text(str_reply, "command not defined, enter \"help <cmd name>\"");
-    return -1;
+    dap_chain_node_cli_cmd_values_parse_net_chain(&l_arg_index, a_argc, a_argv, a_str_reply, &l_chain, &l_net);
+    if (!l_net || !l_chain) {
+        return -2;
+    } else if (a_str_reply && *a_str_reply) {
+        DAP_DELETE(*a_str_reply);
+        *a_str_reply = NULL;
+    }
+    dap_hash_fast_t l_tx_hash;
+    char *l_hex_str_from58 = NULL;
+    if (dap_chain_hash_fast_from_str(l_tx_hash_str, &l_tx_hash) < 0) {
+        l_hex_str_from58 = dap_enc_base58_to_hex_str_from_str(l_tx_hash_str);
+        if (!l_hex_str_from58) {
+            dap_chain_node_cli_set_reply_text(a_str_reply, "Invalid tx hash format, need hex or base58");
+            return -3;
+        }
+    }
+    size_t l_tx_size = 0;
+    char *l_gdb_group = dap_chain_net_get_gdb_group_mempool(l_chain);
+    dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t *)
+            dap_chain_global_db_gr_get(l_hex_str_from58 ? l_hex_str_from58 : l_tx_hash_str, &l_tx_size, l_gdb_group);
+    if (!l_tx) {
+        dap_chain_node_cli_set_reply_text(a_str_reply, "Specified tx not found");
+        return -3;
+    }
+    if (dap_chain_ledger_tx_add_check(l_net->pub.ledger, l_tx)) {
+        dap_chain_node_cli_set_reply_text(a_str_reply, "Specified tx verify fail!");
+        return -4;
+    }
+    dap_chain_node_cli_set_reply_text(a_str_reply, "Specified tx verified successfully");
+    return 0;
 }
 
 
@@ -3999,7 +4032,7 @@ int com_tx_history(int a_argc, char ** a_argv, char **a_str_reply)
     if(!l_hash_out_type)
         l_hash_out_type = "hex";
     if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type,"base58")) {
-        dap_chain_node_cli_set_reply_text(a_str_reply, "invalid parameter -H, valid values: -H <hex | base58>");
+        dap_chain_node_cli_set_reply_text(a_str_reply, "Invalid parameter -H, valid values: -H <hex | base58>");
         return -1;
     }
 
diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c
index 6fb5949d8145b3539ccf262ccea35654d832c591..d1b0be0a91eb322e8d222bdeaf39538f8f8e2e11 100644
--- a/modules/net/dap_chain_node_cli_cmd_tx.c
+++ b/modules/net/dap_chain_node_cli_cmd_tx.c
@@ -121,8 +121,8 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
         dap_string_append_printf(a_str_out, "transaction: %s hash: %s\n Items:\n", l_list_tx_any ? "(emit)" : "", l_tx_hash_user_str);
     } else {
         char buf[50];
-        dap_string_append_printf(a_str_out, "transaction: %s hash: %s\n TS Created: %s Token ticker: %s\n Items:\n",
-                                 l_list_tx_any ? "(emit)" : "", l_tx_hash_user_str, dap_ctime_r(&l_ts_create, buf),
+        dap_string_append_printf(a_str_out, "transaction:%s hash: %s\n TS Created: %s Token ticker: %s\n Items:\n",
+                                 l_list_tx_any ? " (emit)" : "", l_tx_hash_user_str, dap_ctime_r(&l_ts_create, buf),
                                  dap_chain_ledger_tx_get_token_ticker_by_hash(a_ledger, &l_tx_hash));
     }
     DAP_DELETE(l_tx_hash_user_str);
@@ -267,7 +267,7 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
                                                 "\t\t\t value: %s (%"DAP_UINT64_FORMAT_U")\n"
                                                 "\t\t\t subtype: %s\n"
                                                 "\t\t SubType:\n",
-                                     dap_ctime_r((time_t*)((dap_chain_tx_out_cond_t*)item)->header.ts_expires, l_tmp_buf),
+                                     dap_ctime_r((time_t *)&((dap_chain_tx_out_cond_t*)item)->header.ts_expires, l_tmp_buf),
                                      dap_chain_balance_to_coins(
                                          dap_chain_uint128_from(((dap_chain_tx_out_cond_t*)item)->header.value)
                                      ),
diff --git a/modules/net/include/dap_chain_node_cli_cmd.h b/modules/net/include/dap_chain_node_cli_cmd.h
index 0a35ddba34ef04ff885eb20ea877e1980f7d207d..50fc831af72e399cc12076b641c70b84a476726c 100644
--- a/modules/net/include/dap_chain_node_cli_cmd.h
+++ b/modules/net/include/dap_chain_node_cli_cmd.h
@@ -117,7 +117,7 @@ int com_tx_cond_create(int argc, char ** argv, char **str_reply);
  *
  * Verifing transaction
  */
-int com_tx_verify(int argc, char ** argv, char **str_reply);
+int com_tx_verify(int a_argc, char ** a_argv, char **a_str_reply);
 
 /**
  * tx_history command
diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c
index 5206e305e18b7e83014b1641840bda9553b6ac05..80898e657256bf23ed7ba59ddaa5a00e7bdf2b0d 100644
--- a/modules/net/srv/dap_chain_net_srv.c
+++ b/modules/net/srv/dap_chain_net_srv.c
@@ -111,13 +111,13 @@ int dap_chain_net_srv_init()
         "        -price_unit <Price Unit> -price_token <Token ticker> [-node_addr <Node Address>] [-tx_cond <TX Cond Hash>]\n"
         "        [-expires <Unix time when expires>] [-cert <cert name to sign order>]\n"
         "        [{-ext <Extension with params> | -region <Region name> -continent <Continent name>}]\n"
-
+#ifdef DAP_MODULES_DYNAMIC
         "\tOrder create\n"
             "net_srv -net <chain net name> order static [save | delete]\n"
             "\tStatic nodelist create/delete\n"
             "net_srv -net <chain net name> order recheck\n"
             "\tCheck the availability of orders\n"
-
+#endif
         );
 
     s_load_all();
@@ -584,7 +584,10 @@ static int s_cli_net_srv( int argc, char **argv, char **a_str_reply)
             }
         }
 #endif
-        else {
+        else if (l_order_str) {
+            dap_string_append_printf(l_string_ret, "Unrecognized subcommand '%s'", l_order_str);
+            ret = -14;
+        } else {
             dap_string_append_printf(l_string_ret, "Command 'net_srv' requires subcommand 'order'");
             ret = -3;
         }
diff --git a/modules/net/srv/include/dap_chain_net_srv_common.h b/modules/net/srv/include/dap_chain_net_srv_common.h
index a6ab4bf0838149ef687ecf8428623b05e75f979a..9c56f4dc38f75c29522b61b74d8ac808c37f54a5 100755
--- a/modules/net/srv/include/dap_chain_net_srv_common.h
+++ b/modules/net/srv/include/dap_chain_net_srv_common.h
@@ -37,11 +37,12 @@
 
 
 //Service direction
-typedef enum dap_chain_net_srv_order_direction{
+enum dap_chain_net_srv_order_direction{
     SERV_DIR_BUY = 1,
     SERV_DIR_SELL = 2,
     SERV_DIR_UNDEFINED = 0
-} dap_chain_net_srv_order_direction_t;
+};
+typedef byte_t dap_chain_net_srv_order_direction_t;
 
 
 typedef struct dap_chain_net_srv_abstract
diff --git a/modules/net/srv/include/dap_chain_net_srv_order.h b/modules/net/srv/include/dap_chain_net_srv_order.h
index 809305a7cfe03d28ee240ca2f710f6b12ec51e2e..c5bbdadf89502e2d39b03405ab54bd288b0d5c25 100644
--- a/modules/net/srv/include/dap_chain_net_srv_order.h
+++ b/modules/net/srv/include/dap_chain_net_srv_order.h
@@ -34,7 +34,7 @@ typedef struct dap_chain_net_srv_order
     uint16_t version;
     dap_chain_net_srv_uid_t srv_uid; // Service UID
     byte_t padding; // some padding
-    dap_chain_net_srv_order_direction_t direction:8; // Order direction - SELL or PURCHASE
+    dap_chain_net_srv_order_direction_t direction; // Order direction - SELL or PURCHASE
     dap_chain_node_addr_t node_addr; // Node address that servs the order (if present)
     dap_chain_hash_fast_t tx_cond_hash; // Hash index of conditioned transaction attached with order
     dap_chain_net_srv_price_unit_uid_t price_unit; // Unit of service (seconds, megabytes, etc.) Only for SERV_CLASS_PERMANENT