diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index 2ef28135c8e3f4e74ecfb96f3001c8fb31206090..52885f1f6348ccf3a77f163488407977d30c9186 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -381,27 +381,27 @@ int dap_chain_ledger_token_add(dap_ledger_t *a_ledger, dap_chain_datum_token_t *
      switch(a_token->type){
         case DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE:
             l_token_item->datum_token->header_simple.current_supply_256 = a_token->header_simple.total_supply_256;
-            l_token_item->total_supply = a_token->header_simple.total_supply_256;    
+            l_token_item->total_supply = a_token->header_simple.total_supply_256;
             l_token_item->current_supply = a_token->header_simple.total_supply_256;
             l_token_item->auth_signs_total = a_token->header_simple.signs_total;
             l_token_item->auth_signs_valid = a_token->header_simple.signs_valid;
-            l_token_cache->header_simple.current_supply_256 = l_token_item->total_supply;   
+            l_token_cache->header_simple.current_supply_256 = l_token_item->total_supply;
         break;
         case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL:
             l_token_item->datum_token->header_private_decl.current_supply_256 = a_token->header_private_decl.total_supply_256;
-            l_token_item->total_supply = a_token->header_private_decl.total_supply_256;    
+            l_token_item->total_supply = a_token->header_private_decl.total_supply_256;
             l_token_item->current_supply = a_token->header_private_decl.total_supply_256;
             l_token_item->auth_signs_total = a_token->header_private_decl.signs_total;
             l_token_item->auth_signs_valid = a_token->header_private_decl.signs_valid;
-            l_token_cache->header_private_decl.current_supply_256 = l_token_item->total_supply;   
+            l_token_cache->header_private_decl.current_supply_256 = l_token_item->total_supply;
         break;
             case DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_DECL:
             l_token_item->datum_token->header_native_decl.current_supply_256 = a_token->header_native_decl.total_supply_256;
-            l_token_item->total_supply = a_token->header_native_decl.total_supply_256;    
+            l_token_item->total_supply = a_token->header_native_decl.total_supply_256;
             l_token_item->current_supply = a_token->header_native_decl.total_supply_256;
             l_token_item->auth_signs_total = a_token->header_native_decl.signs_total;
             l_token_item->auth_signs_valid = a_token->header_native_decl.signs_valid;
-            l_token_cache->header_native_decl.current_supply_256 = l_token_item->total_supply;   
+            l_token_cache->header_native_decl.current_supply_256 = l_token_item->total_supply;
         default:
         break;
      }
@@ -450,7 +450,7 @@ int dap_chain_ledger_token_add(dap_ledger_t *a_ledger, dap_chain_datum_token_t *
             }
             break;
         }
-        case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL: // 256         
+        case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL: // 256
             l_token_item->auth_signs= dap_chain_datum_token_simple_signs_parse(a_token,a_token_size,
                                                                                     &l_token_item->auth_signs_total,
                                                                                     &l_token_item->auth_signs_valid );
@@ -466,7 +466,7 @@ int dap_chain_ledger_token_add(dap_ledger_t *a_ledger, dap_chain_datum_token_t *
             }
             s_token_tsd_parse(a_ledger,l_token_item, a_token, a_token_size);
             break;
-        case DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_DECL: // 256          
+        case DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_DECL: // 256
             l_token_item->auth_signs= dap_chain_datum_token_simple_signs_parse(a_token,a_token_size,
                                                                                     &l_token_item->auth_signs_total,
                                                                                     &l_token_item->auth_signs_valid );
@@ -617,7 +617,7 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_chain_ledger_token_ite
                                 if(s_debug_more)
                                     log_it(L_ERROR,"TSD param DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD has address %s thats already present in list",
                                        l_addr_str);
-                                DAP_DELETE(l_addr_str);     
+                                DAP_DELETE(l_addr_str);
                                 DAP_DELETE(a_token_item->tx_recv_allow);
                                 a_token_item->tx_recv_allow = NULL;
                                 return -11;
@@ -983,9 +983,9 @@ dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger)
             case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE: // 256
                 l_type_str = "PRIVATE_UPDATE"; break;
             case DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_DECL: // 256
-                l_type_str = "CF20"; break;
+                l_type_str = "NATIVE"; break;
             case DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_UPDATE: // 256
-                l_type_str = "CF20_UPDATE"; break;
+                l_type_str = "NATIVE_UPDATE"; break;
             case DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC: // 256
             case DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PUBLIC:
                 l_type_str = "PUBLIC";
@@ -994,16 +994,7 @@ dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger)
         }
        char *l_item_str = NULL;
 
-        if ((l_token_item->type == DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_DECL) || (l_token_item->type == DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_UPDATE)){
-                l_item_str = dap_strdup_printf("Token name '%s', type %s, flags: %s\n"
-                                                "\tDecimals: 18\n"
-                                                "\tAuth signs (valid/total) %zu/%zu\n"
-                                                "\tTotal emissions %u\n",
-                                                &l_token_item->ticker, l_type_str, s_flag_str_from_code(l_token_item->datum_token->header_private_decl.flags),
-                                                l_token_item->auth_signs_valid, l_token_item->auth_signs_total,
-                                                HASH_COUNT(l_token_item->token_emissions));
-        } else {
-                l_item_str = dap_strdup_printf("Token name '%s', type %s, flags: %s\n"
+       l_item_str = dap_strdup_printf("Token name '%s', type %s, flags: %s\n"
                                                 "\tSupply (current/total) %s/%s\n"
                                                 "\tAuth signs (valid/total) %zu/%zu\n"
                                                 "\tTotal emissions %u\n",
@@ -1011,7 +1002,6 @@ dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger)
                                                 dap_chain_balance_print(l_token_item->current_supply), dap_chain_balance_print(l_token_item->total_supply),
                                                 l_token_item->auth_signs_valid, l_token_item->auth_signs_total,
                                                 HASH_COUNT(l_token_item->token_emissions));
-        }
 
         l_ret_list = dap_list_append(l_ret_list, l_item_str);
     }
@@ -1021,19 +1011,17 @@ dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger)
 
 /**
  * @brief update current_supply in token cache
- * 
+ *
  * @param a_ledger ledger object
  * @param l_token_item token item object
  * @param l_emission_value size of emission
- * @return true 
- * @return false 
+ * @return true
+ * @return false
  */
 bool s_update_token_cache(dap_ledger_t *a_ledger, dap_chain_ledger_token_item_t * l_token_item, uint256_t l_emission_value)
 {
     //Update value in ledger memory object
 
-    if (IS_ZERO_256(l_token_item->total_supply))
-        return true;     // Supply is unlimited
     if (s_token_supply_limit_disable){
         log_it(L_WARNING,"s_token_supply_limit_disable is enabled in config, please fix it and disable");
         return false;
@@ -1049,23 +1037,23 @@ bool s_update_token_cache(dap_ledger_t *a_ledger, dap_chain_ledger_token_item_t
                                         dap_chain_balance_print(l_emission_value));
             return false;
     }
+    //if load mode, we don't save anything
+    if (PVT(a_ledger)->load_mode)
+        return true;
+    // if cache mode disable we can't read something from GDB
+    if (!dap_config_get_item_bool_default(g_config, "ledger", "cached", true))
+        return true;
+
     // load ledger cache from GDB
     // Get dap_chain_datum_token_t token object from GDB, key is token name
     char *l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_TOKENS_STR);
     size_t l_obj_length = 0;
     dap_chain_datum_token_t *l_token_cache = (dap_chain_datum_token_t *)
             dap_chain_global_db_gr_get(l_token_item->ticker, &l_obj_length, l_gdb_group);
-    if (!l_token_cache) {
-        if(s_debug_more)
-            log_it(L_WARNING, "Ledger cache mismatch");
-        DAP_DELETE(l_gdb_group);
-        return false;
-    }
     l_token_cache->header_simple.current_supply_256 = l_token_item->current_supply;
     if (!dap_chain_global_db_gr_set(l_token_item->ticker, l_token_cache, l_obj_length, l_gdb_group)) {
         if(s_debug_more)
             log_it(L_WARNING, "Ledger cache mismatch");
-        DAP_DELETE(l_token_cache);
         DAP_DELETE(l_gdb_group);
         return false;
     }
@@ -1162,13 +1150,13 @@ void dap_chain_ledger_load_cache(dap_ledger_t *a_ledger)
             l_token_item->current_supply = GET_256_FROM_64(l_token_item->datum_token->header_simple.current_supply);
             l_token_item->auth_signs_total = l_token_item->datum_token->header_simple.signs_total;
             l_token_item->auth_signs_valid = l_token_item->datum_token->header_simple.signs_valid;
-        }  else if (l_token_item->datum_token->type == DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE) 
+        }  else if (l_token_item->datum_token->type == DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE)
         {
             l_token_item->total_supply = l_token_item->datum_token->header_simple.total_supply_256;
             l_token_item->current_supply = l_token_item->datum_token->header_simple.current_supply_256;
             l_token_item->auth_signs_total = l_token_item->datum_token->header_simple.signs_total;
             l_token_item->auth_signs_valid = l_token_item->datum_token->header_simple.signs_valid;
-            if (l_token_item->auth_signs_total) 
+            if (l_token_item->auth_signs_total)
             {
                 l_token_item->auth_signs_pkey_hash = DAP_NEW_Z_SIZE(dap_chain_hash_fast_t,
                                                                     sizeof(dap_chain_hash_fast_t) * l_token_item->auth_signs_total);
@@ -1179,7 +1167,7 @@ void dap_chain_ledger_load_cache(dap_ledger_t *a_ledger)
                     dap_sign_get_pkey_hash(l_token_item->auth_signs[k], &l_token_item->auth_signs_pkey_hash[k]);
                 }
             }
-        } else if (l_token_item->datum_token->type == DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL) 
+        } else if (l_token_item->datum_token->type == DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL)
         {
             l_token_item->total_supply = l_token_item->datum_token->header_private_decl.total_supply_256;
             l_token_item->current_supply = l_token_item->datum_token->header_private_decl.current_supply_256;
@@ -1196,7 +1184,7 @@ void dap_chain_ledger_load_cache(dap_ledger_t *a_ledger)
                     dap_sign_get_pkey_hash(l_token_item->auth_signs[k], &l_token_item->auth_signs_pkey_hash[k]);
                 }
             }
-        } else if (l_token_item->datum_token->type == DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_DECL) 
+        } else if (l_token_item->datum_token->type == DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_DECL)
         {
             l_token_item->total_supply = l_token_item->datum_token->header_native_decl.total_supply_256;
             l_token_item->current_supply = l_token_item->datum_token->header_native_decl.current_supply_256;
@@ -1322,12 +1310,12 @@ dap_ledger_t* dap_chain_ledger_create(uint16_t a_check_flags, char *a_net_name)
 }
 
 /**
- * @brief 
- * 
- * @param l_add_addr01 
- * @param l_add_addr02 
- * @return true 
- * @return false 
+ * @brief
+ *
+ * @param l_add_addr01
+ * @param l_add_addr02
+ * @return true
+ * @return false
  */
 bool s_chain_compare_token_addresses(dap_chain_addr_t * l_add_addr01, dap_chain_addr_t * l_add_addr02)
 {
@@ -1337,7 +1325,7 @@ bool s_chain_compare_token_addresses(dap_chain_addr_t * l_add_addr01, dap_chain_
     //0 if equal
     if (!memcmp(l_add_addr01,l_add_addr02,sizeof(dap_chain_addr_t)))
         return true;
-    
+
     return false;
 }
 
@@ -1352,7 +1340,7 @@ bool s_chain_ledger_token_tsd_check(dap_chain_ledger_token_item_t * l_token_item
     dap_tsd_t *l_tsd = dap_chain_datum_token_tsd_get(l_token_item->datum_token, l_token_item->datum_token_size);
     if (!l_tsd)
         return false;
-    
+
     dap_chain_addr_t *l_add_addr = NULL;
     size_t l_tsd_size=0;
     size_t l_tsd_total_size = l_token_item->datum_token->header_private_decl.tsd_total_size;
@@ -1381,7 +1369,7 @@ bool s_chain_ledger_token_tsd_check(dap_chain_ledger_token_item_t * l_token_item
             default:
                 break;
         }
-    } 
+    }
     log_it(L_WARNING, "Address %s is not allowed for emission for token %s", dap_chain_addr_to_str(&a_token_emission->hdr.address), l_token_item->ticker);
     return false;
 }
@@ -1439,19 +1427,11 @@ int dap_chain_ledger_token_emission_add_check(dap_ledger_t *a_ledger, byte_t *a_
         return -5;
     }
 
-    // if total_supply > 0 we can check current_supply
-    if (!IS_ZERO_256(l_token_item->total_supply)){
-        if (compare256(l_token_item->current_supply, l_emission->hdr.value_256) < 0){
-        log_it(L_WARNING,"Ledger_token_emission_add_check. current_supply %s is lower, then l_emission->hdr.value_256: %s",
-                        dap_chain_balance_print(l_token_item->current_supply),
-                        dap_chain_balance_print(l_emission->hdr.value_256));
+    if (compare256(l_token_item->current_supply, l_emission->hdr.value_256) < 0)
         return -4;
-        }
-    }
-        
     //additional check for private tokens
     if ((l_token_item->type == DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL) ||
-            (l_token_item->type == DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE) || 
+            (l_token_item->type == DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE) ||
             (l_token_item->type == DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_DECL) ||
              (l_token_item->type == DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_UPDATE)) {
         if (!s_chain_ledger_token_tsd_check(l_token_item, l_emission))
@@ -1523,7 +1503,7 @@ int dap_chain_ledger_token_emission_add(dap_ledger_t *a_ledger, byte_t *a_token_
     pthread_rwlock_rdlock(&l_ledger_priv->tokens_rwlock);
     HASH_FIND_STR(l_ledger_priv->tokens, c_token_ticker, l_token_item);
     pthread_rwlock_unlock(&l_ledger_priv->tokens_rwlock);
-    dap_chain_ledger_token_emission_item_t * l_token_emission_item = NULL; 
+    dap_chain_ledger_token_emission_item_t * l_token_emission_item = NULL;
     if (!l_token_item && a_from_threshold)
         return DAP_CHAIN_CS_VERIFY_CODE_TX_NO_TOKEN;
 
@@ -1621,7 +1601,7 @@ int dap_chain_ledger_token_emission_load(dap_ledger_t *a_ledger, byte_t *a_token
     if (PVT(a_ledger)->load_mode) {
         dap_chain_ledger_token_emission_item_t *l_token_emission_item;
         dap_chain_ledger_token_item_t *l_token_item, *l_item_tmp;
-        pthread_rwlock_rdlock(&PVT(a_ledger)->tokens_rwlock);       
+        pthread_rwlock_rdlock(&PVT(a_ledger)->tokens_rwlock);
         HASH_ITER(hh, PVT(a_ledger)->tokens, l_token_item, l_item_tmp) {
             pthread_rwlock_rdlock(&l_token_item->token_emissions_rwlock);
             HASH_FIND(hh, l_token_item->token_emissions, &l_token_emission_hash, sizeof(l_token_emission_hash),
@@ -3609,3 +3589,8 @@ dap_list_t * dap_chain_ledger_get_txs(dap_ledger_t *a_ledger, size_t a_count, si
     }
     return l_list;
 }
+
+bool dap_chain_ledger_fee_verificator(dap_chain_tx_out_cond_t *a_cond, dap_chain_datum_tx_t *a_tx, bool a_owner)
+{
+    return false;
+}
diff --git a/modules/chain/include/dap_chain_ledger.h b/modules/chain/include/dap_chain_ledger.h
index 57a22ad4f53f6ee07b208a6b39d0d57ac664ac6f..c7d0900f1409fcb0958b6d462e08f5873436b66d 100644
--- a/modules/chain/include/dap_chain_ledger.h
+++ b/modules/chain/include/dap_chain_ledger.h
@@ -226,3 +226,5 @@ int dap_chain_ledger_verificator_add(dap_chain_tx_out_cond_subtype_t a_subtype,
 
 // Getting a list of transactions from the ledger.
 dap_list_t * dap_chain_ledger_get_txs(dap_ledger_t *a_ledger, size_t a_count, size_t a_page);
+
+bool dap_chain_ledger_fee_verificator(dap_chain_tx_out_cond_t *a_cond, dap_chain_datum_tx_t *a_tx, bool a_owner);
diff --git a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
index f0d0b88f012802f7ec27b7c94ce61abb546759fc..9a10082f6b6dad587176d01fbee865624118b730 100644
--- a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
+++ b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
@@ -195,9 +195,9 @@ static bool s_grace_period_control(dap_chain_net_srv_grace_t *a_grace)
             }
 
             // Check cond output if it equesl or not to request
-            if ( l_tx_out_cond->subtype.srv_pay.srv_uid.uint64 != l_request->hdr.srv_uid.uint64 ){
+            if (!dap_chain_net_srv_uid_compare(l_tx_out_cond->header.srv_uid, l_request->hdr.srv_uid)) {
                 log_it( L_WARNING, "Wrong service uid in request, tx expect to close its output with 0x%016"DAP_UINT64_FORMAT_X,
-                        l_tx_out_cond->subtype.srv_pay.srv_uid.uint64 );
+                        l_tx_out_cond->header.srv_uid.uint64 );
                 l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_WRONG_SRV_UID  ;
                 goto free_exit;
             }
@@ -266,7 +266,7 @@ static bool s_grace_period_control(dap_chain_net_srv_grace_t *a_grace)
             } else {
                 l_price = DAP_NEW_Z(dap_chain_net_srv_price_t);
                 memcpy(l_price, l_srv->pricelist, sizeof(*l_price));
-                l_price->value_datoshi = 0;
+                l_price->value_datoshi = uint256_0;
             }
             l_usage->price = l_price;         
             l_usage->receipt = dap_chain_net_srv_issue_receipt(l_usage->service, l_usage->price, NULL, 0);
diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c
index 377b98defc9dd083e5afaed2538ca90409a34a59..49edea6e914538a110da71ae6bbf8a4fbd6a755a 100644
--- a/modules/common/dap_chain_datum_token.c
+++ b/modules/common/dap_chain_datum_token.c
@@ -332,12 +332,22 @@ dap_chain_datum_token_emission_t *dap_chain_datum_emission_add_tsd(dap_chain_dat
 
 dap_chain_datum_token_emission_t *dap_chain_datum_emission_add_sign(dap_enc_key_t *a_sign_key, dap_chain_datum_token_emission_t *a_emission)
 {
-    if (!a_emission)
+    if (!a_emission || a_emission->hdr.type != DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_AUTH)
         return NULL;
-    size_t l_emission_size = dap_chain_datum_emission_get_size((uint8_t *)a_emission);
-    dap_sign_t *l_sign = dap_sign_create(a_sign_key, a_emission, sizeof(a_emission->hdr), 0);
+    size_t l_pub_key_size = 0;
+    dap_sign_t *l_sign = (dap_sign_t *)(a_emission->tsd_n_signs + a_emission->data.type_auth.tsd_total_size);
+    uint8_t *l_pub_key = dap_enc_key_serealize_pub_key(a_sign_key, &l_pub_key_size);
+    for (int i = 0; i < a_emission->data.type_auth.signs_count; i++) {
+        if (l_sign->header.sign_pkey_size == l_pub_key_size &&
+                !memcmp(l_sign->pkey_n_sign, l_pub_key, l_pub_key_size))
+            return a_emission;  // this sign already exists
+        l_sign = (dap_sign_t *)((byte_t *)l_sign + dap_sign_get_size(l_sign));
+    }
+    DAP_DELETE(l_pub_key);
+    l_sign = dap_sign_create(a_sign_key, a_emission, sizeof(a_emission->hdr), 0);
     if (!l_sign)
         return NULL;
+    size_t l_emission_size = dap_chain_datum_emission_get_size((uint8_t *)a_emission);
     dap_chain_datum_token_emission_t *l_ret = DAP_REALLOC(a_emission, l_emission_size + dap_sign_get_size(l_sign));
     size_t l_sign_size = dap_sign_get_size(l_sign);
     memcpy(l_ret->tsd_n_signs + l_ret->data.type_auth.size, l_sign, l_sign_size);
diff --git a/modules/common/dap_chain_datum_tx.c b/modules/common/dap_chain_datum_tx.c
index 37889fdc067611e805783d5f2864554bc0d0d70e..3e0ba4267257dff335ff2aa08f255edb91a5597b 100644
--- a/modules/common/dap_chain_datum_tx.c
+++ b/modules/common/dap_chain_datum_tx.c
@@ -142,6 +142,17 @@ int dap_chain_datum_tx_add_in_cond_item(dap_chain_datum_tx_t **a_tx, dap_chain_h
 
 }
 
+int dap_chain_datum_tx_add_fee_item(dap_chain_datum_tx_t **a_tx, uint256_t a_value)
+{
+    dap_chain_tx_out_cond_t *l_tx_out_fee = dap_chain_datum_tx_item_out_cond_create_fee(a_value);
+    if (l_tx_out_fee) {
+        dap_chain_datum_tx_add_item(a_tx, (const uint8_t *)l_tx_out_fee);
+        DAP_DELETE(l_tx_out_fee);
+        return 1;
+    }
+    return -1;
+}
+
 /**
  * Create 'out' item and insert to transaction
  *
diff --git a/modules/common/dap_chain_datum_tx_items.c b/modules/common/dap_chain_datum_tx_items.c
index dbb8480aa850770264e4ad863dcf5d3d566ebf99..c6d3b256d0bdb3205461ce220e8bfa113343d8b7 100644
--- a/modules/common/dap_chain_datum_tx_items.c
+++ b/modules/common/dap_chain_datum_tx_items.c
@@ -226,6 +226,8 @@ dap_chain_tx_out_t* dap_chain_datum_tx_item_out_create(const dap_chain_addr_t *a
 {
     if(!a_addr)
         return NULL;
+    if (IS_ZERO_256(a_value))
+        return NULL;
     dap_chain_tx_out_t *l_item = DAP_NEW_Z(dap_chain_tx_out_t);
     l_item->header.type = TX_ITEM_TYPE_OUT;
     l_item->header.value = a_value;
@@ -237,6 +239,8 @@ dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_chain_a
 {
     if (!a_addr || !a_token)
         return NULL;
+    if (IS_ZERO_256(a_value))
+        return NULL;
     dap_chain_tx_out_ext_t *l_item = DAP_NEW_Z(dap_chain_tx_out_ext_t);
     l_item->header.type = TX_ITEM_TYPE_OUT_EXT;
     l_item->header.value = a_value;
@@ -245,6 +249,17 @@ dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_chain_a
     return l_item;
 }
 
+dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_fee(uint256_t a_value)
+{
+    if (IS_ZERO_256(a_value))
+        return NULL;
+    dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z(dap_chain_tx_out_cond_t);
+    l_item->header.item_type = TX_ITEM_TYPE_OUT_COND;
+    l_item->header.value = a_value;
+    l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE;
+    return l_item;
+}
+
 /**
  * Create item dap_chain_tx_out_cond_t
  *
@@ -257,15 +272,16 @@ dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap_pke
 {
     if (!a_key || !a_key->pkey)
         return NULL;
-
+    if (IS_ZERO_256(a_value))
+        return NULL;
     dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z_SIZE(dap_chain_tx_out_cond_t, sizeof(dap_chain_tx_out_cond_t) + a_params_size);
-    if(l_item == NULL)
+    if (l_item == NULL)
         return NULL;
 
     l_item->header.item_type = TX_ITEM_TYPE_OUT_COND;
     l_item->header.value = a_value;
     l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY;
-    l_item->subtype.srv_pay.srv_uid = a_srv_uid;
+    l_item->header.srv_uid = a_srv_uid;
     l_item->subtype.srv_pay.unit = a_unit;
     l_item->subtype.srv_pay.unit_price_max_datoshi = a_value_max_per_unit;
     dap_hash_fast(a_key->pkey, a_key->header.size, &l_item->subtype.srv_pay.pkey_hash);
@@ -280,14 +296,15 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap
                                                                              const char *a_token, uint256_t a_value,
                                                                              const void *a_params, uint32_t a_params_size)
 {
-    if (!a_token) {
+    if (!a_token)
+        return NULL;
+    if (IS_ZERO_256(a_value))
         return NULL;
-    }
     dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z_SIZE(dap_chain_tx_out_cond_t, sizeof(dap_chain_tx_out_cond_t) + a_params_size);
     l_item->header.item_type = TX_ITEM_TYPE_OUT_COND;
     l_item->header.value = a_value;
     l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE;
-    l_item->subtype.srv_xchange.srv_uid = a_srv_uid;
+    l_item->header.srv_uid = a_srv_uid;
     l_item->subtype.srv_xchange.net_id = a_net_id;
     strcpy(l_item->subtype.srv_xchange.token, a_token);
     l_item->params_size = a_params_size;
@@ -297,15 +314,17 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap
     return l_item;
 }
 
-dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake(dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value, long double a_fee_value,
+dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake(dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value, uint256_t a_fee_value,
                                                                            dap_chain_addr_t *a_fee_addr, dap_chain_addr_t *a_hldr_addr,
                                                                            dap_chain_addr_t *a_signing_addr, dap_chain_node_addr_t *a_signer_node_addr)
 {
+    if (IS_ZERO_256(a_value))
+        return NULL;
     dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z(dap_chain_tx_out_cond_t);
     l_item->header.item_type = TX_ITEM_TYPE_OUT_COND;
     l_item->header.value = a_value;
     l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE;
-    l_item->subtype.srv_stake.srv_uid = a_srv_uid;
+    l_item->header.srv_uid = a_srv_uid;
     l_item->subtype.srv_stake.fee_value = a_fee_value;
     memcpy(&l_item->subtype.srv_stake.fee_addr, a_fee_addr, sizeof(dap_chain_addr_t));
     memcpy(&l_item->subtype.srv_stake.hldr_addr, a_hldr_addr, sizeof(dap_chain_addr_t));
diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h
index df1f4a7f6c2bb9506edfed018a47dced84931f13..225ed8e7624cdbfa9388f967b11b21ae492a659f 100644
--- a/modules/common/include/dap_chain_datum_token.h
+++ b/modules/common/include/dap_chain_datum_token.h
@@ -78,8 +78,6 @@ typedef struct dap_chain_datum_token{
             };
             uint16_t signs_valid; // Emission auth signs
             uint16_t signs_total; // Emission auth signs
-            uint16_t padding01;
-            size_t   padding02; 
             uint16_t signs_current;
         } DAP_ALIGN_PACKED header_simple;
         // Private token declarations, with flags, manipulations and updates
@@ -95,7 +93,7 @@ typedef struct dap_chain_datum_token{
             uint16_t signs_valid; // Emission auth signs
             uint16_t signs_total; // Emission auth signs
             uint16_t flags; // Token declaration flags
-            size_t tsd_total_size; // Data size section with values in key-length-value list trailing the signs section
+            uint64_t tsd_total_size; // Data size section with values in key-length-value list trailing the signs section
             uint16_t signs_current;
         } DAP_ALIGN_PACKED header_private_decl;
         //native tokens
@@ -111,18 +109,19 @@ typedef struct dap_chain_datum_token{
             uint16_t signs_valid; // Emission auth signs
             uint16_t signs_total; // Emission auth signs
             uint16_t flags; // Token declaration flags
-            size_t tsd_total_size; // Data size section with values in key-length-value list trailing the signs section
+            uint64_t tsd_total_size; // Data size section with values in key-length-value list trailing the signs section
             uint16_t signs_current;
+            uint16_t decimals;
         } DAP_ALIGN_PACKED header_native_decl;
         // Private token update
         struct {
             uint16_t padding;
-            size_t tsd_total_size; // Data size section with extended values in key-length-value list.
+            uint64_t tsd_total_size; // Data size section with extended values in key-length-value list.
         } DAP_ALIGN_PACKED header_private_update;
         // native token update
         struct {
             uint16_t padding;
-            size_t tsd_total_size; // Data size section with extended values in key-length-value list.
+            uint64_t tsd_total_size; // Data size section with extended values in key-length-value list.
         } DAP_ALIGN_PACKED header_native_update;
         // Public token declaration
         struct {
diff --git a/modules/common/include/dap_chain_datum_tx.h b/modules/common/include/dap_chain_datum_tx.h
index f07af98f8a19f8c74b72b484a80d6244df116018..f16eabcd54fa08371d1c14ae56b28b70d65ae100 100644
--- a/modules/common/include/dap_chain_datum_tx.h
+++ b/modules/common/include/dap_chain_datum_tx.h
@@ -106,6 +106,13 @@ int dap_chain_datum_tx_add_in_cond_item(dap_chain_datum_tx_t **a_tx, dap_chain_h
  */
 int dap_chain_datum_tx_add_out_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr, uint256_t a_value);
 
+/**
+ * Create 'out_cond' item with fee value and insert to transaction
+ *
+ * return 1 Ok, -1 Error
+ */
+int dap_chain_datum_tx_add_fee_item(dap_chain_datum_tx_t **a_tx, uint256_t a_value);
+
 /**
  * Create 'out'_ext item and insert to transaction
  *
diff --git a/modules/common/include/dap_chain_datum_tx_items.h b/modules/common/include/dap_chain_datum_tx_items.h
index 77ce4f9b05bc97baaed8bcdfcb233101fb898db1..7712406aec2afe5f028f1b56200dafed51960ce3 100644
--- a/modules/common/include/dap_chain_datum_tx_items.h
+++ b/modules/common/include/dap_chain_datum_tx_items.h
@@ -106,6 +106,13 @@ dap_chain_tx_out_t* dap_chain_datum_tx_item_out_create(const dap_chain_addr_t *a
  */
 dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_chain_addr_t *a_addr, uint256_t a_value, const char *a_token);
 
+/**
+ * Create item dap_chain_tx_out_cond_t with fee subtype
+ *
+ * return item, NULL Error
+ */
+dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_fee(uint256_t a_value);
+
 /**
  * Create item dap_chain_tx_out_cond_t
  *
@@ -128,7 +135,7 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap
  *
  * return item, NULL Error
  */
-dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake(dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value, long double a_fee_value,
+dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake(dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value, uint256_t a_fee_value,
                                                                                dap_chain_addr_t *a_fee_addr, dap_chain_addr_t *a_hldr_addr,
                                                                                dap_chain_addr_t *a_signing_addr, dap_chain_node_addr_t *a_signer_node_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 39a407918d5d32de9371f72186fa62156f5b8ae5..b1f8a23daeec7a8e594832ad2644fbf84d78535d 100644
--- a/modules/common/include/dap_chain_datum_tx_out_cond.h
+++ b/modules/common/include/dap_chain_datum_tx_out_cond.h
@@ -33,7 +33,7 @@ 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 = 0x3,
-    DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_FEE = 0x04,
+    DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE = 0x04,
     DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_UPDATE = 0xFA       // Virtual type for stake update verificator //TODO change it to new type of callback for ledger tx add
 };
 typedef byte_t dap_chain_tx_out_cond_subtype_t;
@@ -42,7 +42,7 @@ DAP_STATIC_INLINE const char *dap_chain_tx_out_cond_subtype_to_str(dap_chain_tx_
     switch (a_subtype) {
     case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY";
     case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE";
-    case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_FEE: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_FEE";
+    case DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE";
     case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE";
     default: {}
     }
@@ -59,12 +59,15 @@ typedef struct dap_chain_tx_out_cond {
         dap_chain_tx_item_type_t item_type;
         /// Condition subtype
         dap_chain_tx_out_cond_subtype_t subtype;
-        /// Service uid that only could be used for this out
-        dap_chain_net_srv_uid_t srv_uid;
         /// Number of Datoshis ( DAP/10^18 ) to be reserved for service
         uint256_t value;
         /// When time expires this output could be used only by transaction owner
         dap_chain_time_t ts_expires;
+        /// Service uid that only could be used for this out
+        dap_chain_net_srv_uid_t srv_uid;
+#if DAP_CHAIN_NET_SRV_UID_SIZE == 8
+        byte_t padding[8];
+#endif
     } header;
     union {
         /// Structure with specific for service pay condition subtype
@@ -89,15 +92,18 @@ typedef struct dap_chain_tx_out_cond {
             dap_chain_addr_t hldr_addr;
             // Fee address
             dap_chain_addr_t fee_addr;
-            // Fee value in percent
-            long double fee_value;
+            // Fee value in percent (fixed point)
+            uint256_t fee_value;
             // Public key hash of signing certificate combined with net id
             dap_chain_addr_t signing_addr;
             // Node address of signer with this stake
             dap_chain_node_addr_t signer_node_addr;
         } srv_stake;
+        struct {
+            // Nothing here
+        } fee;
+        byte_t free_space[128]; // for future changes
     } subtype;
-    byte_t free_space[256]; // for future changes
     uint32_t params_size; // Condition parameters size
     uint8_t params[]; // condition parameters, pkey, hash or smth like this
 } DAP_ALIGN_PACKED dap_chain_tx_out_cond_t;
diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c
index f6717e5f5821a75d055d4eb759f9874671234d06..7160e16435aefbbbcfc31f42fc820d4695ac7845 100644
--- a/modules/mempool/dap_chain_mempool.c
+++ b/modules/mempool/dap_chain_mempool.c
@@ -62,6 +62,7 @@
 #include "dap_sign.h"
 #include "dap_chain_datum_tx.h"
 #include "dap_chain_datum_tx_items.h"
+#include "dap_chain_net_srv.h"
 
 #define LOG_TAG "dap_chain_mempool"
 
@@ -107,14 +108,12 @@ char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t
  */
 dap_hash_fast_t* dap_chain_mempool_tx_create(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,
         const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
         uint256_t a_value, uint256_t a_value_fee)
 {
     // check valid param
     if(!a_chain | !a_key_from || ! a_addr_from || !a_key_from->priv_key_data || !a_key_from->priv_key_data_size ||
-            !dap_chain_addr_check_sum(a_addr_from) || !dap_chain_addr_check_sum(a_addr_to) ||
-            (a_addr_fee && !dap_chain_addr_check_sum(a_addr_fee)) || IS_ZERO_256(a_value))
+            !dap_chain_addr_check_sum(a_addr_from) || !dap_chain_addr_check_sum(a_addr_to) || IS_ZERO_256(a_value))
         return NULL;
 
     // find the transactions from which to take away coins
@@ -141,8 +140,8 @@ dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_
         if(dap_chain_datum_tx_add_out_item(&l_tx, a_addr_to, a_value) == 1) {
             SUM_256_256(l_value_pack, a_value, &l_value_pack);
             // transaction fee
-            if(a_addr_fee) {
-                if(dap_chain_datum_tx_add_out_item(&l_tx, a_addr_fee, a_value_fee) == 1)
+            if (!IS_ZERO_256(a_value_fee)) {
+                if(dap_chain_datum_tx_add_fee_item(&l_tx, a_value_fee) == 1)
                     SUM_256_256(l_value_pack, a_value_fee, &l_value_pack);
             }
         }
@@ -188,14 +187,13 @@ dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_
  */
 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,
         const char a_token_ticker[10],
         uint256_t a_value, uint256_t a_value_fee,size_t a_tx_num)
 {
     // check valid param
     if(!a_chain | !a_key_from || !a_addr_from || !a_key_from->priv_key_data || !a_key_from->priv_key_data_size ||
             !dap_chain_addr_check_sum(a_addr_from) || !dap_chain_addr_check_sum(a_addr_to) ||
-            (a_addr_fee && !dap_chain_addr_check_sum(a_addr_fee)) || IS_ZERO_256(a_value) || !a_tx_num){
+            IS_ZERO_256(a_value) || !a_tx_num){
         log_it(L_ERROR, "Wrong parameters in dap_chain_mempool_tx_create_massive() call");
         return -1;
 
@@ -262,8 +260,8 @@ int dap_chain_mempool_tx_create_massive( dap_chain_t * a_chain, dap_enc_key_t *a
         if(dap_chain_datum_tx_add_out_item(&l_tx_new, a_addr_to, a_value) == 1) {
             SUM_256_256(l_value_pack, a_value, &l_value_pack);
             // transaction fee
-            if(a_addr_fee) {
-                if(dap_chain_datum_tx_add_out_item(&l_tx_new, a_addr_fee, a_value_fee) == 1)
+            if (!IS_ZERO_256(a_value_fee)) {
+                if (dap_chain_datum_tx_add_fee_item(&l_tx_new, a_value_fee) == 1)
                     SUM_256_256(l_value_pack, a_value_fee, &l_value_pack);
             }
         }
@@ -399,7 +397,7 @@ dap_chain_datum_t *dap_chain_tx_create_cond_input(dap_chain_net_t * a_net, dap_c
                 continue;
             if (l_tmp_cond->header.subtype != l_out_cond->header.subtype)
                 continue;
-            if (l_tmp_cond->subtype.srv_pay.srv_uid.uint64 != l_out_cond->subtype.srv_pay.srv_uid.uint64)
+            if (!dap_chain_net_srv_uid_compare(l_tmp_cond->header.srv_uid, l_out_cond->header.srv_uid))
                 continue;
             if (l_tmp_cond->subtype.srv_pay.unit.uint32 != l_out_cond->subtype.srv_pay.unit.uint32)
                 continue;
diff --git a/modules/mempool/include/dap_chain_mempool.h b/modules/mempool/include/dap_chain_mempool.h
index 8a8e4ef26518baacaaa96f734603914e1225ea11..20118221f71e784b28c6244babe033e302dab7cb 100644
--- a/modules/mempool/include/dap_chain_mempool.h
+++ b/modules/mempool/include/dap_chain_mempool.h
@@ -47,7 +47,6 @@ void dap_chain_mempool_add_proc(dap_http_t * a_http_server, const char * a_url);
 char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t *a_chain);
 dap_hash_fast_t*  dap_chain_mempool_tx_create(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,
         const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
         uint256_t a_value, uint256_t a_value_fee);
 
@@ -66,11 +65,10 @@ dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t *
 
 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,
         const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
         uint256_t a_value, uint256_t a_value_fee, size_t a_tx_num);
 
 dap_chain_hash_fast_t *dap_chain_mempool_base_tx_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash,
                                                         dap_chain_id_t a_emission_chain_id, uint256_t a_emission_value, const char *a_ticker,
                                                         dap_chain_addr_t *a_addr_to, dap_cert_t **a_certs, size_t a_certs_count);
-dap_chain_datum_token_emission_t *dap_chain_mempool_emission_get(dap_chain_t *a_chain, const char *a_emission_hash_str);
\ No newline at end of file
+dap_chain_datum_token_emission_t *dap_chain_mempool_emission_get(dap_chain_t *a_chain, const char *a_emission_hash_str);
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 7a4e8b5fed171d815c14eaf40bf2d16673b35746..7b8b3e417c10f2f83aa06bce51381b50601dd076 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -3341,7 +3341,7 @@ void dap_chain_net_dump_datum(dap_string_t *a_str_out, dap_chain_datum_t *a_datu
                                     switch ( l_out->header.subtype){
                                         case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY:{
                                             dap_string_append_printf(a_str_out,"\tsubtype: DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY\n");
-                                            dap_string_append_printf(a_str_out,"\tsrv_uid: 0x%016"DAP_UINT64_FORMAT_x"\n", l_out->subtype.srv_pay.srv_uid.uint64 );
+                                            dap_string_append_printf(a_str_out,"\tsrv_uid: 0x%016"DAP_UINT64_FORMAT_x"\n", l_out->header.srv_uid.uint64 );
                                             switch (l_out->subtype.srv_pay.unit.enm) {
                                                 case SERV_UNIT_UNDEFINED: dap_string_append_printf(a_str_out,"\tunit: SERV_UNIT_UNDEFINED\n"); break;
                                                 case SERV_UNIT_MB: dap_string_append_printf(a_str_out,"\tunit: SERV_UNIT_MB\n"); break;
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 02f8faf258e50f513f86e690190800bd5fde9e43..9a0dfc63a4fcbaf0e01d29f3ac31dea18a0a3305 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -2939,19 +2939,16 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply)
         }
     }
 
+    const char * l_decimals_str = NULL;
     if (l_type == DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_DECL){
-        const char * l_deciamls_str = NULL;
-        dap_chain_node_cli_find_option_val(a_argv, 0, a_argc, "-decimals", &l_deciamls_str);
-        if(!l_deciamls_str) {
+        dap_chain_node_cli_find_option_val(a_argv, 0, a_argc, "-decimals", &l_decimals_str);
+        if(!l_decimals_str) {
             dap_chain_node_cli_set_reply_text(a_str_reply, "token_decl requires parameter '-decimals'");
             return -3;
-        } else {
-            l_total_supply = dap_chain_balance_scan((char *)l_deciamls_str);
-            if (dap_strcmp(l_deciamls_str, "18")) {
-                dap_chain_node_cli_set_reply_text(a_str_reply,
-                        "token_decl support '-decimals' to be 18 only");
-                return -4;
-            }
+        } else if (dap_strcmp(l_decimals_str, "18")) {
+            dap_chain_node_cli_set_reply_text(a_str_reply,
+                    "token_decl support '-decimals' to be 18 only");
+            return -4;
         }
     }
    
@@ -3114,7 +3111,7 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply)
                 l_datum_token->header_native_decl.current_supply_256 = uint256_0;
                 l_datum_token->header_native_decl.signs_total = l_signs_total;
                 l_datum_token->header_native_decl.signs_valid = l_signs_emission;
-                
+                l_datum_token->header_native_decl.decimals = atoi(l_decimals_str);
             }
 
             // Sign header with all certificates in the list and add signs to the end of ticker declaration
@@ -3852,7 +3849,6 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
 //    int cmd_num = 1;
 //    const char *value_str = NULL;
     const char *addr_base58_to = NULL;
-    const char *addr_base58_fee = NULL;
     const char *str_tmp = NULL;
     const char * l_from_wallet_name = NULL;
     const char * l_token_ticker = NULL;
@@ -3881,12 +3877,12 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
 
     if(l_tx_num_str)
         l_tx_num = strtoul(l_tx_num_str, NULL, 10);
-
-    if(dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-fee", &addr_base58_fee)) {
-        if(dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-value_fee", &str_tmp)) {
-            l_value_fee = dap_chain_balance_scan(str_tmp);
-        }
+    if(dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-fee", &str_tmp)) {
+        l_value_fee = dap_chain_balance_scan(str_tmp);
+    } else {
+        l_value_fee = dap_chain_coins_to_balance("0.1");
     }
+
     if(dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-value", &str_tmp)) {
         l_value = dap_chain_balance_scan(str_tmp);
     }
@@ -3938,9 +3934,9 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
         dap_chain_node_cli_set_reply_text(str_reply, "tx_create requires parameter '-value' to be valid uint256 value");
         return -4;
     }
-    if(addr_base58_fee && IS_ZERO_256(l_value_fee)) {
+    if (IS_ZERO_256(l_value_fee)) {
         dap_chain_node_cli_set_reply_text(str_reply,
-                "tx_create requires parameter '-value_fee' to be valid uint256 value if '-fee' is specified");
+                "tx_create requires parameter '-value_fee' to be valid uint256");
         return -5;
     }
 
@@ -3989,16 +3985,11 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
     }
     const dap_chain_addr_t *addr_from = (const dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet, l_net->pub.id);
 
-    dap_chain_addr_t *addr_fee = dap_chain_addr_from_str(addr_base58_fee);
-
     if(!addr_from) {
         dap_chain_node_cli_set_reply_text(str_reply, "source address is invalid");
         return -10;
     }
-    if(addr_base58_fee && !addr_fee) {
-        dap_chain_node_cli_set_reply_text(str_reply, "fee address is invalid");
-        return -12;
-    }
+
     // Check, if network ID is same as ID in destination wallet address. If not - operation is cancelled.
     if (l_addr_to->net_id.uint64 != l_net->pub.id.uint64) {
         dap_chain_node_cli_set_reply_text(str_reply, "destination wallet network ID=0x%llx and network ID=0x%llx is not equal. Please, change network name or wallet address", 
@@ -4008,15 +3999,13 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
 
     if(l_tx_num){
         res = dap_chain_mempool_tx_create_massive(l_chain, dap_chain_wallet_get_key(l_wallet, 0), addr_from,
-                               l_addr_to, addr_fee,
-                               l_token_ticker, l_value, l_value_fee, l_tx_num);
+                                                  l_addr_to, l_token_ticker, l_value, l_value_fee, l_tx_num);
 
         dap_string_append_printf(string_ret, "transfer=%s\n",
                 (res == 0) ? "Ok" : (res == -2) ? "False, not enough funds for transfer" : "False");
     }else{
         dap_hash_fast_t * l_tx_hash = dap_chain_mempool_tx_create(l_chain, dap_chain_wallet_get_key(l_wallet, 0), addr_from, l_addr_to,
-                addr_fee,
-                l_token_ticker, l_value, l_value_fee);
+                                                                  l_token_ticker, l_value, l_value_fee);
         if (l_tx_hash){
             char l_tx_hash_str[80]={[0]='\0'};
             dap_chain_hash_fast_to_str(l_tx_hash,l_tx_hash_str,sizeof (l_tx_hash_str)-1);
@@ -4033,7 +4022,6 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
     dap_string_free(string_ret, false);
 
     DAP_DELETE(l_addr_to);
-    DAP_DELETE(addr_fee);
     dap_chain_wallet_close(l_wallet);
     return res;
 }
diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c
index b32dad6429abbada71f97d6f7b8085405c429ed8..5dc333bd872b446425a70ac54735f0ce18fd95a3 100644
--- a/modules/net/dap_chain_node_cli_cmd_tx.c
+++ b/modules/net/dap_chain_node_cli_cmd_tx.c
@@ -361,7 +361,7 @@ static bool s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
                                                     "\t\t\t pkey: %s\n"
                                                     "\t\t\t max price: %s (%s) \n",
                                          ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit.uint32,
-                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.srv_uid.uint64,
+                                         ((dap_chain_tx_out_cond_t*)item)->header.srv_uid.uint64,
                                          l_hash_str,
                                          dap_chain_balance_to_coins(((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi),
                                          dap_chain_balance_print(((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi)
@@ -371,12 +371,12 @@ static bool s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
             case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE:
                 dap_string_append_printf(a_str_out, "\t\t\t uid: 0x%016"DAP_UINT64_FORMAT_x"\n"
                                                     "\t\t\t addr: %s\n"
-                                                    "\t\t\t value: %Lf",
-                                        ((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake.srv_uid.uint64,
+                                                    "\t\t\t value: %s",
+                                        ((dap_chain_tx_out_cond_t*)item)->header.srv_uid.uint64,
                                         dap_chain_addr_to_str(
-                                             &((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake.fee_addr
-                                        ),
-                                        ((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake.fee_value
+                                             &((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake.fee_addr),
+                                         dap_chain_balance_to_coins(
+                                        ((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake.fee_value)
                 );
                 break;
             case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE:
@@ -384,7 +384,7 @@ static bool s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
                                                     "\t\t\t net id: 0x%016"DAP_UINT64_FORMAT_x"\n"
                                                     "\t\t\t token: %s\n"
                                                     "\t\t\t value: %s (%s)\n",
-                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.srv_uid.uint64,
+                                         ((dap_chain_tx_out_cond_t*)item)->header.srv_uid.uint64,
                                          ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.net_id.uint64,
                                          ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.token,
                                          dap_chain_balance_to_coins(((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.value),
diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c
index f1f25554f05a258e21fc44583d6165d88cfbf37b..f6ab77a56c20120c04f8524c139cbbac561c297e 100644
--- a/modules/net/srv/dap_chain_net_srv.c
+++ b/modules/net/srv/dap_chain_net_srv.c
@@ -638,8 +638,8 @@ int dap_chain_net_srv_parse_pricelist(dap_chain_net_srv_t *a_srv, const char *a_
                 }
                 continue;
             case 1:
-                l_price->value_datoshi = dap_chain_uint256_to(dap_chain_coins_to_balance(l_price_token));
-                if (!l_price->value_datoshi) {
+                l_price->value_datoshi = dap_chain_coins_to_balance(l_price_token);
+                if (IS_ZERO_256(l_price->value_datoshi)) {
                     log_it(L_ERROR, "Error parsing pricelist: text on 2nd position \"%s\" is not floating number", l_price_token);
                     l_iter = 0;
                     DAP_DELETE(l_price);
@@ -943,7 +943,7 @@ dap_chain_datum_tx_receipt_t * dap_chain_net_srv_issue_receipt(dap_chain_net_srv
                                                                const void * a_ext, size_t a_ext_size)
 {
     dap_chain_datum_tx_receipt_t * l_receipt = dap_chain_datum_tx_receipt_create(
-                    a_srv->uid, a_price->units_uid, a_price->units, dap_chain_uint256_from(a_price->value_datoshi), a_ext, a_ext_size);
+                    a_srv->uid, a_price->units_uid, a_price->units, a_price->value_datoshi, a_ext, a_ext_size);
     // Sign with our wallet
     return dap_chain_datum_tx_receipt_sign_add(l_receipt, dap_chain_wallet_get_key(a_price->wallet, 0));
 }
diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c
index 87ae6a84580b6bc9f0a049cae30470c337064fef..07406de49096a8a93ae64fd376752290b332cc29 100644
--- a/modules/net/srv/dap_chain_net_srv_order.c
+++ b/modules/net/srv/dap_chain_net_srv_order.c
@@ -447,7 +447,7 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_
             continue; // order is corrupted
         }
         dap_chain_hash_fast_t l_hash, l_hash_gdb;
-        dap_hash_fast(l_orders[i].value, l_order_size, &l_hash);
+        dap_hash_fast(l_orders[i].value, l_orders[i].value_len, &l_hash);
         dap_chain_hash_fast_from_str(l_orders[i].key, &l_hash_gdb);
         if (memcmp(&l_hash, &l_hash_gdb, sizeof(dap_chain_hash_fast_t))) {
             dap_chain_global_db_gr_del(l_orders[i].key, l_gdb_group_str);
diff --git a/modules/net/srv/include/dap_chain_net_srv.h b/modules/net/srv/include/dap_chain_net_srv.h
index ecbc6070ef1ce78a9124bfc544ec5148ee4f0e10..741cde906838da77706cdeccf10764f7ffba0bcb 100755
--- a/modules/net/srv/include/dap_chain_net_srv.h
+++ b/modules/net/srv/include/dap_chain_net_srv.h
@@ -58,7 +58,7 @@ typedef struct dap_chain_net_srv_abstract
     //size_t pub_key_data_size;
     //void * pub_key_data;
 
-    uint64_t price; //  service price, for SERV_CLASS_ONCE ONCE for the whole service, for SERV_CLASS_PERMANENT  for one unit.
+    uint256_t price; //  service price, for SERV_CLASS_ONCE ONCE for the whole service, for SERV_CLASS_PERMANENT  for one unit.
     uint8_t price_units; // Unit of service (seconds, megabytes, etc.) Only for SERV_CLASS_PERMANENT
     char decription[128];
 }DAP_ALIGN_PACKED dap_chain_net_srv_abstract_t;
@@ -70,7 +70,7 @@ typedef struct dap_chain_net_srv_price
     dap_chain_wallet_t *wallet;
     char *net_name;
     dap_chain_net_t *net;
-    uint64_t value_datoshi;
+    uint256_t value_datoshi;
     char token[DAP_CHAIN_TICKER_SIZE_MAX];
     uint64_t units;
     dap_chain_net_srv_price_unit_uid_t units_uid;
@@ -300,7 +300,7 @@ DAP_STATIC_INLINE const char * dap_chain_net_srv_price_unit_uid_to_str( dap_chai
     }
 }
 
-DAP_STATIC_INLINE dap_chain_net_srv_uid_compare(dap_chain_net_srv_uid_t a, dap_chain_net_srv_uid_t b)
+DAP_STATIC_INLINE bool dap_chain_net_srv_uid_compare(dap_chain_net_srv_uid_t a, dap_chain_net_srv_uid_t b)
 {
 #if DAP_CHAIN_NET_SRV_UID_SIZE == 8
     return a.uint64 == b.uint64;
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 4c959be7e93dc4921b90c03c0bf62ddbef6cc4c0..0923e8b8f3a0d5813a9e9c5e1669ba91562fc372 100644
--- a/modules/net/srv/include/dap_chain_net_srv_order.h
+++ b/modules/net/srv/include/dap_chain_net_srv_order.h
@@ -74,6 +74,7 @@ int dap_chain_net_srv_order_init(void);
 void dap_chain_net_srv_order_deinit(void);
 
 size_t dap_chain_net_srv_order_get_size(dap_chain_net_srv_order_t *a_order);
+dap_chain_net_srv_order_t *dap_chain_net_srv_order_read(byte_t *a_order, size_t a_order_size);
 
 bool dap_chain_net_srv_order_set_continent_region(dap_chain_net_srv_order_t **a_order, uint8_t a_continent_num, const char *a_region);
 bool dap_chain_net_srv_order_get_continent_region(dap_chain_net_srv_order_t *a_order, uint8_t *a_continent_num, char **a_region);
diff --git a/modules/service/datum/dap_chain_net_srv_datum.c b/modules/service/datum/dap_chain_net_srv_datum.c
index 9b209bec77deae9fe64b673406cae254e4e8f22f..1240704382737032bb07b9a232a3ba3d486177e1 100644
--- a/modules/service/datum/dap_chain_net_srv_datum.c
+++ b/modules/service/datum/dap_chain_net_srv_datum.c
@@ -33,7 +33,7 @@
 
 #define LOG_TAG "chain_net_srv_datum"
 
-static dap_chain_net_srv *s_srv_datum = NULL;
+static dap_chain_net_srv_t *s_srv_datum = NULL;
 static int s_srv_datum_cli(int argc, char ** argv, char **a_str_reply);
 
 void s_order_notficator(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);
@@ -187,7 +187,7 @@ void s_order_notficator(void *a_arg, const char a_op_code, const char *a_group,
     if (a_op_code == DAP_DB$K_OPTYPE_DEL)
         return;
     dap_chain_net_t *l_net = (dap_chain_net_t *)a_arg;
-    dap_chain_net_srv_order_t *l_order = dap_chain_net_srv_order_read(a_value);    // Old format comliance
+    dap_chain_net_srv_order_t *l_order = dap_chain_net_srv_order_read((byte_t *)a_value, a_value_len);    // Old format comliance
     if (!l_order) {
         dap_chain_global_db_gr_del(a_key, a_group);
         return; // order is corrupted
@@ -203,7 +203,7 @@ void s_order_notficator(void *a_arg, const char a_op_code, const char *a_group,
         log_it(L_DEBUG, "Price for net %s is not set", l_net->pub.name);
         return; // price not set for this network
     }
-    if ((l_order->price_unit != SERV_UNIT_PCS) || (l_order->direction != SERV_DIR_BUY) ||
+    if ((l_order->price_unit.uint32 != SERV_UNIT_PCS) || (l_order->direction != SERV_DIR_BUY) ||
             (strncmp(l_order->price_ticker, l_price->token, DAP_CHAIN_TICKER_SIZE_MAX)) ||
             (!compare256(l_order->price, l_price->value_datoshi))) {
         log_it(L_DEBUG, "Price from order (%s) is not equal to price from service pricelist (%s)",
@@ -230,13 +230,14 @@ void s_order_notficator(void *a_arg, const char a_op_code, const char *a_group,
         log_it(L_DEBUG, "Invalid tx cond datum hash");
         return;
     }
+    int l_tx_out_cond_size;
     dap_chain_tx_out_cond_t *l_cond_out = (dap_chain_tx_out_cond_t *)
             dap_chain_datum_tx_item_get(l_tx_cond, NULL, TX_ITEM_TYPE_OUT_COND, &l_tx_out_cond_size);
     if (!l_cond_out || l_cond_out->header.subtype != DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY) {
         log_it(L_DEBUG, "Condition with required subtype SRV_PAY not found in requested tx");
     }
     dap_hash_fast_t l_sign_hash;
-    if (!dap_sign_get_pkey_hash(l_order->ext_n_sign[l_order->ext_size], &l_sign_hash)) {
+    if (!dap_sign_get_pkey_hash((dap_sign_t *)&l_order->ext_n_sign[l_order->ext_size], &l_sign_hash)) {
          log_it(L_DEBUG, "Wrong order sign");
          return;
     }
diff --git a/modules/service/stake/dap_chain_net_srv_stake.c b/modules/service/stake/dap_chain_net_srv_stake.c
index ac71d863c0761497e2d3a4bf620ccc565bfde297..b0cdb80a5be079fd9be85f4616a07575f022737f 100644
--- a/modules/service/stake/dap_chain_net_srv_stake.c
+++ b/modules/service/stake/dap_chain_net_srv_stake.c
@@ -329,7 +329,7 @@ bool dap_chain_net_srv_stake_validator(dap_chain_addr_t *a_addr, dap_chain_datum
         }
     }
     dap_list_free(l_list_out_items);
-    uint256_t l_fee = MULT_256_FLOAT(l_outs_sum, l_stake->fee_value / 100.0);
+    uint256_t l_fee = {}; // TODO replace with fractional mult MULT_256_FLOAT(l_outs_sum, l_stake->fee_value / 100.0);
     if (compare256(l_fee_sum, l_fee) == -1) {
         return false;
     }
@@ -667,8 +667,8 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
                 dap_chain_node_cli_set_reply_text(a_str_reply, "Command 'order create' required parameter -fee_percent");
                 return -11;
             }
-            long double l_fee = strtold(l_fee_str, NULL);
-            if (!l_fee) {
+            uint256_t l_fee = dap_chain_coins_to_balance(l_fee_str);
+            if (IS_ZERO_256(l_fee)) {
                 dap_chain_node_cli_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%)");
                 return -12;
             }
@@ -743,8 +743,8 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
                 dap_chain_node_cli_set_reply_text(a_str_reply, "Command 'order declare' required parameter -fee_percent");
                 return -11;
             }
-            long double l_fee = strtold(l_fee_str, NULL);
-            if (!l_fee) {
+            uint256_t l_fee = dap_chain_coins_to_balance(l_fee_str);
+            if (IS_ZERO_256(l_fee)) {
                 dap_chain_node_cli_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%)");
                 return -12;
             }
@@ -980,8 +980,8 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
                 // TODO add filters to list (token, address, etc.)
                 l_stake = s_stake_item_from_order(l_net, l_order);
                 char *l_addr = dap_chain_addr_to_str(&l_stake->signing_addr);
-                dap_string_append_printf(l_reply_str, "%s %s %s %s %Lf\n", l_orders[i].key, dap_chain_balance_print(l_stake->value),
-                                                                           l_stake->token, l_addr, l_stake->fee_value);
+                dap_string_append_printf(l_reply_str, "%s %s %s %s %s\n", l_orders[i].key, dap_chain_balance_print(l_stake->value),
+                                                                           l_stake->token, l_addr, dap_chain_balance_to_coins(l_stake->fee_value));
                 DAP_DELETE(l_addr);
                 DAP_DELETE(l_stake);
             }
@@ -1183,9 +1183,10 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply)
                 char *l_addr_hldr_str = dap_chain_addr_to_str(&l_stake->addr_hldr);
                 char *l_signing_addr_str = dap_chain_addr_to_str(&l_stake->signing_addr);
                 char *l_addr_fee_str = dap_chain_addr_to_str(&l_stake->addr_fee);
-                dap_string_append_printf(l_reply_str, "%s %s %s %s %s %s %Lf\n", l_tx_hash_str, l_stake->token,
+                dap_string_append_printf(l_reply_str, "%s %s %s %s %s %s %s\n", l_tx_hash_str, l_stake->token,
                                                                                  dap_chain_balance_print(l_stake->value), l_addr_hldr_str,
-                                                                                 l_signing_addr_str, l_addr_fee_str, l_stake->fee_value);
+                                                                                 l_signing_addr_str, l_addr_fee_str,
+                                                                                 dap_chain_balance_to_coins(l_stake->fee_value));
                 DAP_DELETE(l_tx_hash_str);
                 DAP_DELETE(l_addr_hldr_str);
                 DAP_DELETE(l_signing_addr_str);
diff --git a/modules/service/stake/include/dap_chain_net_srv_stake.h b/modules/service/stake/include/dap_chain_net_srv_stake.h
index d6bd14222f3265e2086fc2c982e6e7c275aa99c2..f28cdcc8a73e744fb30b2578b0ef73fe67320a11 100644
--- a/modules/service/stake/include/dap_chain_net_srv_stake.h
+++ b/modules/service/stake/include/dap_chain_net_srv_stake.h
@@ -37,7 +37,7 @@ typedef struct dap_chain_net_srv_stake_item {
     dap_chain_addr_t addr_hldr;
     dap_chain_addr_t addr_fee;
     dap_chain_addr_t signing_addr;
-    long double fee_value;
+    uint256_t fee_value;
     dap_chain_hash_fast_t tx_hash;
     dap_chain_node_addr_t node_addr;
     UT_hash_handle hh;
@@ -46,7 +46,7 @@ typedef struct dap_chain_net_srv_stake_item {
 typedef struct dap_srv_stake_order_ext {
     dap_chain_addr_t addr_hldr;
     dap_chain_addr_t signing_addr;
-    long double fee_value;
+    uint256_t fee_value;
 } dap_srv_stake_order_ext_t;
 
 typedef struct dap_chain_net_srv_stake {
diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index 317f41073b1a791a421dff27c75fb241580771f4..16610ca7eb5453134931c4f361f4bb0aa4ff7cd0 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -557,7 +557,7 @@ static int s_cli_blocks(int a_argc, char ** a_argv, char **a_str_reply)
 
                 HASH_ITER(hh,PVT(l_blocks)->block_cache_first,l_block_cache, l_block_cache_tmp ) {
                     char l_buf[50];
-                    ctime_r(&l_block_cache->block->hdr.ts_created, l_buf);
+                    ctime_r((time_t *)&l_block_cache->block->hdr.ts_created, l_buf);
                     dap_string_append_printf(l_str_tmp,"\t%s: ts_create=%s",
                                              l_block_cache->block_hash_str, l_buf);
                 }