diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c
index 1dd01400b6502092054dd90b3d734c50e1ccad48..ba460749c8fa62d9c055360e946733a4834aa634 100644
--- a/modules/chain/dap_chain.c
+++ b/modules/chain/dap_chain.c
@@ -211,9 +211,15 @@ void dap_chain_delete(dap_chain_t * a_chain)
  */
 dap_chain_atom_ptr_t dap_chain_get_atom_by_hash(dap_chain_t * a_chain, dap_chain_hash_fast_t * a_atom_hash, size_t * a_atom_size)
 {
-    dap_chain_atom_iter_t * l_iter = a_chain->callback_atom_iter_create(a_chain);
-    dap_chain_atom_ptr_t l_ret = a_chain->callback_atom_find_by_hash(l_iter, a_atom_hash, a_atom_size);
-    a_chain->callback_atom_iter_delete(l_iter);
+    dap_chain_atom_ptr_t l_ret = NULL;
+    dap_chain_cell_t *l_cell, *l_iter_tmp;
+    HASH_ITER(hh, a_chain->cells, l_cell, l_iter_tmp) {
+        dap_chain_atom_iter_t * l_iter = a_chain->callback_atom_iter_create(a_chain, l_cell->id);
+        l_ret = a_chain->callback_atom_find_by_hash(l_iter, a_atom_hash, a_atom_size);
+        a_chain->callback_atom_iter_delete(l_iter);
+        if (l_ret)
+            break;
+    }
     return l_ret;
 }
 
@@ -269,13 +275,13 @@ static dap_chain_type_t s_chain_type_from_str(const char *a_type_str)
 static uint16_t s_datum_type_from_str(const char *a_type_str)
 {
     if(!dap_strcmp(a_type_str, "token")) {
-        return DAP_CHAIN_DATUM_256_TOKEN_DECL;
+        return DAP_CHAIN_DATUM_TOKEN_DECL;
     }
     if(!dap_strcmp(a_type_str, "emission")) {
-        return DAP_CHAIN_DATUM_256_TOKEN_EMISSION;
+        return DAP_CHAIN_DATUM_TOKEN_EMISSION;
     }
     if(!dap_strcmp(a_type_str, "transaction")) {
-        return DAP_CHAIN_DATUM_256_TX;
+        return DAP_CHAIN_DATUM_TX;
     }
     if(!dap_strcmp(a_type_str, "ca")) {
         return DAP_CHAIN_DATUM_CA;
@@ -561,10 +567,10 @@ void dap_chain_add_callback_notify(dap_chain_t * a_chain, dap_chain_callback_not
  * @param a_atom_hash
  * @return
  */
-bool dap_chain_get_atom_last_hash(dap_chain_t * a_chain, dap_hash_fast_t * a_atom_hash)
+bool dap_chain_get_atom_last_hash(dap_chain_t *a_chain, dap_hash_fast_t *a_atom_hash, dap_chain_cell_id_t a_cel_id)
 {
     bool l_ret = false;
-    dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain);
+    dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain, a_cel_id);
     dap_chain_atom_ptr_t * l_lasts_atom;
     size_t l_lasts_atom_count=0;
     size_t* l_lasts_atom_size =NULL;
diff --git a/modules/chain/dap_chain_cell.c b/modules/chain/dap_chain_cell.c
index 833697d368db7f3974aa6c173f9dcf68256b67e8..5d8756db08e9c0b3192169a873a21f218cf8613f 100644
--- a/modules/chain/dap_chain_cell.c
+++ b/modules/chain/dap_chain_cell.c
@@ -297,7 +297,7 @@ int dap_chain_cell_file_append( dap_chain_cell_t * a_cell, const void* a_atom, s
     // if no atom provided in arguments, we flush all the atoms in given chain
     size_t l_atom_size = a_atom_size ? a_atom_size : 0;
     size_t l_total_wrote_bytes = 0, l_count = 0;
-    dap_chain_atom_iter_t *l_atom_iter = a_atom ? NULL : a_cell->chain->callback_atom_iter_create(a_cell->chain);
+    dap_chain_atom_iter_t *l_atom_iter = a_atom ? NULL : a_cell->chain->callback_atom_iter_create(a_cell->chain, a_cell->id);
     if (!a_atom) {
         fseek(a_cell->file_storage, sizeof(dap_chain_cell_file_header_t), SEEK_SET);
     }
diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index 8212d226479aac152689cf123fecca483eee0695..d7f659e8d2297c39a7ca995fb43f97f720f822d7 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -144,7 +144,7 @@ typedef struct dap_chain_ledger_tx_bound {
         // 256
         dap_chain_256_tx_out_t *tx_prev_out_256;
         dap_chain_256_tx_out_ext_t *tx_prev_out_ext_256;
-        dap_chain_256_tx_out_cond_t *tx_prev_out_cond_256;
+        dap_chain_tx_out_cond_t *tx_prev_out_cond_256;
     } out;
     dap_chain_ledger_tx_item_t *item_out;
 } dap_chain_ledger_tx_bound_t;
@@ -295,7 +295,7 @@ void dap_chain_ledger_load_end(dap_ledger_t *a_ledger)
  * @param a_token
  * @return
  */
-int dap_chain_ledger_token_decl_add_check(dap_ledger_t *a_ledger, byte_t *a_token)
+int dap_chain_ledger_token_decl_add_check(dap_ledger_t *a_ledger, dap_chain_datum_token_t *a_token)
 {
     if ( !a_ledger){
         if(s_debug_more)
@@ -303,7 +303,7 @@ int dap_chain_ledger_token_decl_add_check(dap_ledger_t *a_ledger, byte_t *a_toke
         return  -1;
     }
 
-    dap_chain_ledger_token_item_t * l_token_item;
+    dap_chain_ledger_token_item_t *l_token_item;
     pthread_rwlock_rdlock(&PVT(a_ledger)->tokens_rwlock);
     HASH_FIND_STR(PVT(a_ledger)->tokens, a_token->ticker, l_token_item);
     pthread_rwlock_unlock(&PVT(a_ledger)->tokens_rwlock);
@@ -341,17 +341,16 @@ int dap_chain_ledger_token_ticker_check(dap_ledger_t * a_ledger, const char *a_t
  * @param a_token_size
  * @return
  */
-int dap_chain_ledger_token_add(dap_ledger_t *a_ledger, byte_t *a_token, size_t a_token_size)
+int dap_chain_ledger_token_add(dap_ledger_t *a_ledger, dap_chain_datum_token_t *a_token, size_t a_token_size)
 {
     if ( !a_ledger){
         if(s_debug_more)
             log_it(L_ERROR, "NULL ledger, can't add datum with token declaration!");
         return  -1;
     }
-
     dap_chain_ledger_token_item_t * l_token_item;
     pthread_rwlock_rdlock(&PVT(a_ledger)->tokens_rwlock);
-    HASH_FIND_STR(PVT(a_ledger)->tokens,a_token->ticker,l_token_item);
+    HASH_FIND_STR(PVT(a_ledger)->tokens, a_token->ticker,l_token_item);
     pthread_rwlock_unlock(&PVT(a_ledger)->tokens_rwlock);
 
     if (l_token_item) {
@@ -361,10 +360,10 @@ int dap_chain_ledger_token_add(dap_ledger_t *a_ledger, byte_t *a_token, size_t a
     }
 
     l_token_item = DAP_NEW_Z(dap_chain_ledger_token_item_t);
-    dap_snprintf(l_token_item->ticker,sizeof (l_token_item->ticker),"%s",a_token->ticker);
+    dap_snprintf(l_token_item->ticker,sizeof (l_token_item->ticker), "%s", a_token->ticker);
     pthread_rwlock_init(&l_token_item->token_emissions_rwlock,NULL);
     l_token_item->datum_token = DAP_NEW_Z_SIZE(dap_chain_datum_token_t, a_token_size);
-    memcpy(l_token_item->datum_token, a_token,a_token_size);
+    memcpy(l_token_item->datum_token, a_token, a_token_size);
     pthread_rwlock_wrlock(&PVT(a_ledger)->tokens_rwlock);
     HASH_ADD_STR(PVT(a_ledger)->tokens, ticker, l_token_item);
     pthread_rwlock_unlock(&PVT(a_ledger)->tokens_rwlock);
@@ -392,7 +391,7 @@ int dap_chain_ledger_token_add(dap_ledger_t *a_ledger, byte_t *a_token, size_t a
                 }
                 if(s_debug_more)
                     log_it(L_NOTICE, "Simple token %s added (total_supply = %s total_signs_valid=%hu signs_total=%hu type=DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE )",
-                       a_token->ticker, dap_chain_balance_to_coins(dap_chain_uint128_from_uint256(a_token->header_private.total_supply_256)),
+                       a_token->ticker, dap_chain_balance_to_coins(a_token->header_private.total_supply_256),
                        a_token->header_private.signs_valid, a_token->header_private.signs_total);
             }
             break;
@@ -897,7 +896,7 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_chain_ledger_token_ite
     return 0;
 }
 
-int dap_chain_ledger_token_load(dap_ledger_t *a_ledger, byte_t *a_token, size_t a_token_size)
+int dap_chain_ledger_token_load(dap_ledger_t *a_ledger, dap_chain_datum_token_t *a_token, size_t a_token_size)
 {
     if (PVT(a_ledger)->last_ticker.found) {
         return dap_chain_ledger_token_add(a_ledger, a_token, a_token_size);
@@ -1210,7 +1209,7 @@ int dap_chain_ledger_token_emission_add_check(dap_ledger_t *a_ledger, byte_t *a_
                 log_it(L_ERROR, "Can't add token emission datum of %"DAP_UINT64_FORMAT_U" %s ( %s ): already present in cache",
                     l_token_emission_item->datum_token_emission->hdr.value, c_token_ticker, l_hash_str);
         }
-        ret = -1;
+        l_ret = -1;
     }else if ( (! l_token_item) && ( l_threshold_emissions_count >= s_treshold_emissions_max)) {
         if(s_debug_more)
             log_it(L_WARNING,"Treshold for emissions is overfulled (%zu max)",
@@ -1255,13 +1254,14 @@ int dap_chain_ledger_token_emission_add_check(dap_ledger_t *a_ledger, byte_t *a_
                         break;
                 }
                 if (l_aproves < l_aproves_valid ){
-                    if(s_debug_more)
-                            if ( l_emission->hdr.version == 1 ) // && l_emission->hdr.type_256 ) // 256
+                    if(s_debug_more) {
+                            if ( l_emission->hdr.version == 2 ) // 256
                                log_it(L_WARNING, "Emission of %s datoshi of %s:%s is wrong: only %u valid aproves when %u need",
                                    dap_chain_balance_print(l_emission->hdr.value_256), a_ledger->net_name, l_emission->hdr.ticker, l_aproves, l_aproves_valid );
                             else
                                 log_it(L_WARNING, "Emission of %"DAP_UINT64_FORMAT_U" datoshi of %s:%s is wrong: only %u valid aproves when %u need",
                                    l_emission->hdr.value, a_ledger->net_name, l_emission->hdr.ticker, l_aproves, l_aproves_valid );
+                    }
                     l_ret = -3;
                 }
             }else{
@@ -1341,7 +1341,7 @@ int dap_chain_ledger_token_emission_add(dap_ledger_t *a_ledger, byte_t *a_token_
                                l_token_item?"emissions cache":"emissions treshold",
                                c_dap_chain_datum_token_emission_type_str[ l_token_emission_item->datum_token_emission->hdr.type ] ,
                                dap_chain_balance_to_coins(
-                                    dap_chain_uint128_from_uint256(l_token_emission_item->datum_token_emission->hdr.value_256)
+                                    l_token_emission_item->datum_token_emission->hdr.value_256
                                 ), c_token_ticker,
                                l_token_emission_address_str);
                 else
@@ -2256,9 +2256,9 @@ int dap_chain_ledger_tx_add_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *
 static int s_balance_cache_update(dap_ledger_t *a_ledger, dap_ledger_wallet_balance_t *a_balance)
 {
     char *l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_BALANCES_STR);
-    uint128_t *l_balance_value = DAP_NEW_Z(uint128_t);
+    uint256_t *l_balance_value = DAP_NEW_Z(uint256_t);
     *l_balance_value = a_balance->balance;
-    if (!dap_chain_global_db_gr_set(dap_strdup(a_balance->key), l_balance_value, sizeof(uint128_t), l_gdb_group)) {
+    if (!dap_chain_global_db_gr_set(dap_strdup(a_balance->key), l_balance_value, sizeof(uint256_t), l_gdb_group)) {
         if(s_debug_more)
             log_it(L_WARNING, "Ledger cache mismatch");
         DAP_DELETE(l_balance_value);
@@ -3280,7 +3280,7 @@ dap_list_t *dap_chain_ledger_get_list_tx_outs_with_val(dap_ledger_t *a_ledger, c
         uint32_t l_out_idx_tmp = 0; // current index of 'out' item
         for (dap_list_t *l_list_tmp = l_list_out_items; l_list_tmp; l_list_tmp = dap_list_next(l_list_tmp), l_out_idx_tmp++) {
             dap_chain_tx_item_type_t l_type = *(uint8_t *)l_list_tmp->data;
-            uint256_t l_value = uint256_0;
+            uint256_t l_value = {};
             switch (l_type) {
                 case TX_ITEM_TYPE_OUT: {
                     dap_chain_tx_out_t *l_out = (dap_chain_tx_out_t *)l_list_tmp->data;
@@ -3306,7 +3306,7 @@ dap_list_t *dap_chain_ledger_get_list_tx_outs_with_val(dap_ledger_t *a_ledger, c
                 } break;
                 case TX_ITEM_TYPE_256_OUT_EXT: {
                     dap_chain_256_tx_out_ext_t *l_out_ext = (dap_chain_256_tx_out_ext_t *)l_list_tmp->data;
-                    if ( IS_ZERO_256(l_out_ext->header.value) || memcmp(a_addr_from, &l_out_ext->addr, sizeof(dap_chain_addr_t)) ||
+                    if (IS_ZERO_256(l_out_ext->header.value) || memcmp(a_addr_from, &l_out_ext->addr, sizeof(dap_chain_addr_t)) ||
                             strcmp((char *)a_token_ticker, l_out_ext->token)) {
                         continue;
                     }
@@ -3319,14 +3319,14 @@ dap_list_t *dap_chain_ledger_get_list_tx_outs_with_val(dap_ledger_t *a_ledger, c
             }
             // Check whether used 'out' items
             if (!dap_chain_ledger_tx_hash_is_used_out_item (a_ledger, &l_tx_cur_hash, l_out_idx_tmp)) {
-                list_used_item_t *item = DAP_NEW(list_used_item_t);
+                list_used_item_t *l_item = DAP_NEW(list_used_item_t);
                 memcpy(&item->tx_hash_fast, &l_tx_cur_hash, sizeof(dap_chain_hash_fast_t));
-                item->num_idx_out = l_out_idx_tmp;
-                item->value = l_value;
+                l_item->num_idx_out = l_out_idx_tmp;
+                l_item->value = l_value;
                 l_list_used_out = dap_list_append(l_list_used_out, item);
-                l_value_transfer += item->value;
+                SUM_256_256(l_value_transfer, l_item->value, &l_value_transfer);
                 // already accumulated the required value, finish the search for 'out' items
-                if (l_value_transfer >= a_value_need) {
+                if (compare256(l_value_transfer, a_value_need) != -1) {
                     break;
                 }
             }
diff --git a/modules/chain/include/dap_chain.h b/modules/chain/include/dap_chain.h
index b527a10157a490fa4cb14ac07913dc01f75c5247..7d5b068782782834ee5bb0b72f43d135034d3822 100644
--- a/modules/chain/include/dap_chain.h
+++ b/modules/chain/include/dap_chain.h
@@ -185,4 +185,4 @@ dap_chain_t * dap_chain_load_from_cfg(dap_ledger_t* a_ledger,const char * a_chai
 void dap_chain_delete(dap_chain_t * a_chain);
 void dap_chain_add_callback_notify(dap_chain_t * a_chain, dap_chain_callback_notify_t a_callback, void * a_arg);
 dap_chain_atom_ptr_t dap_chain_get_atom_by_hash(dap_chain_t * a_chain, dap_chain_hash_fast_t * a_atom_hash, size_t * a_atom_size);
-bool dap_chain_get_atom_last_hash(dap_chain_t * a_chain, dap_hash_fast_t * a_atom_hash);
+bool dap_chain_get_atom_last_hash(dap_chain_t *a_chain, dap_hash_fast_t *a_atom_hash, dap_chain_cell_id_t a_cel_id);
diff --git a/modules/chain/include/dap_chain_ledger.h b/modules/chain/include/dap_chain_ledger.h
index 2133380eb798b37ba9a523c2cd67748bbf790a7c..2c51681d898b514cf0fc497ef7fe2609a1dd65b6 100644
--- a/modules/chain/include/dap_chain_ledger.h
+++ b/modules/chain/include/dap_chain_ledger.h
@@ -122,9 +122,9 @@ int dap_chain_ledger_token_ticker_check(dap_ledger_t * a_ledger, const char *a_t
  *
  */
 
-int dap_chain_ledger_token_add(dap_ledger_t *a_ledger, byte_t *a_token, size_t a_token_size);
-int dap_chain_ledger_token_load(dap_ledger_t *a_ledger, byte_t *a_token, size_t a_token_size);
-int dap_chain_ledger_token_decl_add_check(dap_ledger_t *a_ledger, byte_t *a_token);
+int dap_chain_ledger_token_add(dap_ledger_t *a_ledger, dap_chain_datum_token_t *a_token, size_t a_token_size);
+int dap_chain_ledger_token_load(dap_ledger_t *a_ledger, dap_chain_datum_token_t *a_token, size_t a_token_size);
+int dap_chain_ledger_token_decl_add_check(dap_ledger_t *a_ledger, dap_chain_datum_token_t *a_token);
 dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger);
 /**
  * Add token emission datum
diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c
index 45185ab8387b7bb2bbf2da0af495614030819631..31e1601111f9a0744555e8572226e3c152611de9 100644
--- a/modules/channel/chain/dap_stream_ch_chain.c
+++ b/modules/channel/chain/dap_stream_ch_chain.c
@@ -1277,7 +1277,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
                 dap_stream_ch_chain_sync_request_t l_request={};
                 dap_chain_t *l_chain = dap_chain_find_by_id(l_chain_pkt->hdr.net_id, l_chain_pkt->hdr.chain_id);
                 if( l_chain){
-                    dap_chain_get_atom_last_hash(l_chain,& l_request.hash_from); // Move away from i/o reactor to callback processor
+                    dap_chain_get_atom_last_hash(l_chain,& l_request.hash_from, l_chain_pkt->hdr.cell_id); // Move away from i/o reactor to callback processor
                     if( dap_log_level_get()<= L_INFO){
                         char l_hash_from_str[70]={[0]='\0'};
                         dap_chain_hash_fast_to_str(&l_request.hash_from,l_hash_from_str,sizeof (l_hash_from_str)-1);
diff --git a/modules/common/dap_chain_common.c b/modules/common/dap_chain_common.c
index 19513bcc0bd36e6852602abe69c6299e529e4adf..b1fe5b02ff515dfb485c8cb8f814d728ee977a4c 100644
--- a/modules/common/dap_chain_common.c
+++ b/modules/common/dap_chain_common.c
@@ -342,7 +342,7 @@ const union { uint64_t u64[2]; uint32_t u32[4]; } c_pow10[DATOSHI_POW + 1] = {
     { .u64 = {5421010862427522170ULL,    687399551400673280ULL} }          // 38
 };
 
-uint128_t dap_chain_balance_scan128(char *a_balance)
+uint128_t dap_chain_balance_scan128(const char *a_balance)
 {
     int l_strlen = strlen(a_balance);
 #ifdef DAP_GLOBAL_IS_INT128
@@ -403,13 +403,13 @@ uint128_t dap_chain_balance_scan128(char *a_balance)
     return l_ret;
 }
 
-uint256_t dap_chain_balance_scan(char *a_balance)
+uint256_t dap_chain_balance_scan(const char *a_balance)
 {
     return GET_256_FROM_128(dap_chain_balance_scan128(a_balance));
 }
 
 
-uint128_t dap_chain_coins_to_balance128(char *a_coins)
+uint128_t dap_chain_coins_to_balance128(const char *a_coins)
 {
 #ifdef DAP_GLOBAL_IS_INT128
     uint128_t l_ret = 0, l_nul = 0;
@@ -454,7 +454,7 @@ uint128_t dap_chain_coins_to_balance128(char *a_coins)
     return l_ret;
 }
 
-uint256_t dap_chain_coins_to_balance(char *a_coins)
+uint256_t dap_chain_coins_to_balance(const char *a_coins)
 {
     return GET_256_FROM_128(dap_chain_coins_to_balance128(a_coins));
 }
diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c
index 446d3adccece707d3dcf456a3c0969090211f05b..1263cd4bac58ed4f6db4b77c46f3d59e8e94fa5d 100644
--- a/modules/common/dap_chain_datum_token.c
+++ b/modules/common/dap_chain_datum_token.c
@@ -61,12 +61,11 @@ const char *c_dap_chain_datum_token_flag_str[] = {
  * @param a_token_size
  * @return
  */
-dap_tsd_t* dap_chain_datum_token_tsd_get(dap_chain_datum_token_t * a_token, size_t a_token_size)
+dap_tsd_t* dap_chain_datum_token_tsd_get(dap_chain_datum_token_t *a_token, size_t a_token_size)
 {
     // Check if token type could have tsd section
-    size_t l_hdr_size = sizeof(*a_token);
     size_t l_tsd_size;
-
+    size_t l_hdr_size = sizeof(dap_chain_datum_token_old_t);
     if (l_hdr_size > a_token_size){
         log_it(L_WARNING, "Token size smaller then header, corrupted data");
         return NULL;
@@ -74,13 +73,15 @@ dap_tsd_t* dap_chain_datum_token_tsd_get(dap_chain_datum_token_t * a_token, size
 
     switch( a_token->type){
         case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL: // 256
+            l_hdr_size = sizeof(dap_chain_datum_token_t);
         case DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PRIVATE_DECL:
             l_tsd_size = a_token->header_private_decl.tsd_total_size;
-        break;
+            break;
         case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE: // 256
+            l_hdr_size = sizeof(dap_chain_datum_token_t);
         case DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PRIVATE_UPDATE:
             l_tsd_size = a_token->header_private_update.tsd_total_size;
-        break;
+            break;
         default: return NULL;
     }
 
@@ -230,15 +231,18 @@ dap_sign_t ** dap_chain_datum_token_simple_signs_parse(dap_chain_datum_token_t *
     assert(a_datum_token);
     assert(a_signs_total);
     assert(a_signs_valid);
-    assert( a_datum_token_size >= sizeof (a_datum_token));
+    assert(a_datum_token_size >= sizeof(dap_chain_datum_token_old_t));
     dap_sign_t ** l_ret = DAP_NEW_Z_SIZE(dap_sign_t*, sizeof (dap_sign_t*)*a_datum_token->header_private.signs_total );
     *a_signs_total=0;
     *a_signs_valid = a_datum_token->header_private.signs_valid;
     size_t l_offset = 0;
     uint16_t n = 0;
+    size_t l_signs_offset = a_datum_token->type == DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_SIMPLE
+                                                 ? sizeof(dap_chain_datum_token_old_t)
+                                                 : sizeof(dap_chain_datum_token_t);
 
-    while( l_offset < (a_datum_token_size-sizeof (a_datum_token) ) && n < a_datum_token->header_private.signs_total ) {
-        dap_sign_t *l_sign = (dap_sign_t *) ( a_datum_token->data_n_tsd + l_offset);
+    while( l_offset < (a_datum_token_size - l_signs_offset) && n < a_datum_token->header_private.signs_total ) {
+        dap_sign_t *l_sign = (dap_sign_t *)((byte_t *)a_datum_token + l_signs_offset + l_offset);
         size_t l_sign_size = dap_sign_get_size(l_sign);
         if(!l_sign_size ){
             log_it(L_WARNING,"Corrupted signature: size is zero");
diff --git a/modules/common/dap_chain_datum_tx.c b/modules/common/dap_chain_datum_tx.c
index e9a0001fb118a74f8654fa1817bb67dd6ace6a78..61c2784302d8f2add684585de4337a69c3fe7727 100644
--- a/modules/common/dap_chain_datum_tx.c
+++ b/modules/common/dap_chain_datum_tx.c
@@ -104,14 +104,14 @@ int dap_chain_datum_tx_add_in_item(dap_chain_datum_tx_t **a_tx, dap_chain_hash_f
  *
  * return summary value from inserted items
  */
-uint64_t dap_chain_datum_tx_add_in_item_list(dap_chain_datum_tx_t **a_tx, dap_list_t *a_list_used_out)
+uint256_t dap_chain_datum_tx_add_in_item_list(dap_chain_datum_tx_t **a_tx, dap_list_t *a_list_used_out)
 {
     dap_list_t *l_list_tmp = a_list_used_out;
-    uint64_t l_value_to_items = 0; // how many datoshi to transfer
+    uint256_t l_value_to_items = {}; // how many datoshi to transfer
     while (l_list_tmp) {
-        list_used_item_t *item = l_list_tmp->data;
-        if (dap_chain_datum_tx_add_in_item(a_tx, &item->tx_hash_fast, item->num_idx_out) == 1) {
-            l_value_to_items += item->value;
+        list_used_item_t *l_item = l_list_tmp->data;
+        if (dap_chain_datum_tx_add_in_item(a_tx, &l_item->tx_hash_fast, l_item->num_idx_out) == 1) {
+            SUM_256_256(l_value_to_items, l_item->value, &l_value_to_items);
         }
         l_list_tmp = dap_list_next(l_list_tmp);
     }
@@ -182,7 +182,7 @@ int dap_chain_datum_tx_add_out_ext_item(dap_chain_datum_tx_t **a_tx, const dap_c
 int dap_chain_datum_tx_add_out_cond_item(dap_chain_datum_tx_t **a_tx, dap_enc_key_t *a_key, dap_chain_net_srv_uid_t a_srv_uid,
         uint256_t a_value, uint256_t a_value_max_per_unit, dap_chain_net_srv_price_unit_uid_t a_unit, const void *a_cond, size_t a_cond_size)
 {
-    dap_chain_256_tx_out_cond_t *l_tx_out = dap_chain_datum_tx_item_out_cond_create_srv_pay(
+    dap_chain_tx_out_cond_t *l_tx_out = dap_chain_datum_tx_item_out_cond_create_srv_pay(
                 a_key, a_srv_uid,a_value, a_value_max_per_unit, a_unit, a_cond, a_cond_size );
     if(l_tx_out) {
         dap_chain_datum_tx_add_item(a_tx, (const uint8_t *) l_tx_out);
diff --git a/modules/common/dap_chain_datum_tx_items.c b/modules/common/dap_chain_datum_tx_items.c
index a67bd64bea74e853598a26db1ef0731305255afc..8562a823c0b7aabf5c18b1733f6f6a00fdafa15c 100644
--- a/modules/common/dap_chain_datum_tx_items.c
+++ b/modules/common/dap_chain_datum_tx_items.c
@@ -86,13 +86,6 @@ static size_t dap_chain_tx_out_cond_get_size(const dap_chain_tx_out_cond_t *a_it
     return sizeof(dap_chain_tx_out_cond_t) + a_item->params_size;
 }
 
-// 256
-static size_t dap_chain_256_tx_out_cond_get_size(const dap_chain_256_tx_out_cond_t *a_item)
-{
-    return sizeof(dap_chain_256_tx_out_cond_t) + a_item->params_size;
-}
-
-
 static size_t dap_chain_tx_pkey_get_size(const dap_chain_tx_pkey_t *a_item)
 {
     size_t size = sizeof(dap_chain_tx_pkey_t) + a_item->header.sig_size;
@@ -155,10 +148,10 @@ size_t dap_chain_datum_item_tx_get_size(const uint8_t *a_item)
         size = dap_chain_tx_in_cond_get_size((const dap_chain_tx_in_cond_t*) a_item);
         break;
     case TX_ITEM_TYPE_OUT_COND: // Transaction output with condition
-        size = dap_chain_tx_out_cond_get_size((const dap_chain_tx_out_cond_t*) a_item);
+        size = 0; // obsolete dap_chain_tx_out_cond_get_size((const dap_chain_tx_out_cond_t*) a_item);
         break;
     case TX_ITEM_TYPE_256_OUT_COND: // 256
-        size = dap_chain_256_tx_out_cond_get_size((const dap_chain_256_tx_out_cond_t*) a_item);
+        size = dap_chain_tx_out_cond_get_size((const dap_chain_tx_out_cond_t *)a_item);
         break;
     case TX_ITEM_TYPE_PKEY: // Transaction public keys
         size = dap_chain_tx_pkey_get_size((const dap_chain_tx_pkey_t*) a_item);
@@ -260,7 +253,7 @@ dap_chain_256_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_cha
  *
  * return item, NULL Error
  */
-dap_chain_256_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap_enc_key_t *a_key, dap_chain_net_srv_uid_t a_srv_uid,
+dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap_enc_key_t *a_key, dap_chain_net_srv_uid_t a_srv_uid,
                                                                              uint256_t a_value, uint256_t a_value_max_per_unit,
                                                                              dap_chain_net_srv_price_unit_uid_t a_unit,
                                                                              const void *a_params, size_t a_params_size)
@@ -271,7 +264,7 @@ dap_chain_256_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap
     uint8_t *l_pub_key = dap_enc_key_serealize_pub_key(a_key, &l_pub_key_size);
 
 
-    dap_chain_256_tx_out_cond_t *l_item = DAP_NEW_Z_SIZE(dap_chain_256_tx_out_cond_t, sizeof(dap_chain_256_tx_out_cond_t) + a_params_size);
+    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)
         return NULL;
 
@@ -287,14 +280,14 @@ dap_chain_256_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap
     return l_item;
 }
 
-dap_chain_256_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap_chain_net_srv_uid_t a_srv_uid, dap_chain_net_id_t a_net_id,
+dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap_chain_net_srv_uid_t a_srv_uid, dap_chain_net_id_t a_net_id,
                                                                              const char *a_token, uint256_t a_value,
                                                                              const void *a_params, uint32_t a_params_size)
 {
     if (!a_token) {
         return NULL;
     }
-    dap_chain_256_tx_out_cond_t *l_item = DAP_NEW_Z_SIZE(dap_chain_256_tx_out_cond_t, sizeof(dap_chain_256_tx_out_cond_t) + a_params_size);
+    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_256_OUT_COND;
     l_item->header.value = a_value;
     l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE;
@@ -308,11 +301,11 @@ dap_chain_256_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange
     return l_item;
 }
 
-dap_chain_256_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, long double a_fee_value,
                                                                            dap_chain_addr_t *a_fee_addr, dap_chain_addr_t *a_hldr_addr,
                                                                            const void *a_params, uint32_t a_params_size)
 {
-    dap_chain_256_tx_out_cond_t *l_item = DAP_NEW_Z_SIZE(dap_chain_256_tx_out_cond_t, sizeof(dap_chain_256_tx_out_cond_t) + a_params_size);
+    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_256_OUT_COND;
     l_item->header.value = a_value;
     l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE;
@@ -448,23 +441,3 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_out_cond_get(dap_chain_datum_tx_t *a
     }
     return l_res;
 }
-
-// 256
-dap_chain_256_tx_out_cond_t *dap_chain_datum_256_tx_out_cond_get(dap_chain_datum_tx_t *a_tx, int *a_out_num)
-{
-    dap_list_t *l_list_out_items = dap_chain_datum_tx_items_get(a_tx, TX_ITEM_TYPE_OUT_ALL, NULL);
-    int l_prev_cond_idx = l_list_out_items ? 0 : -1;
-    dap_chain_256_tx_out_cond_t *l_res = NULL;
-    for (dap_list_t *l_list_tmp = l_list_out_items; l_list_tmp; l_list_tmp = dap_list_next(l_list_tmp), l_prev_cond_idx++) {
-        if (*(uint8_t *)l_list_tmp->data == TX_ITEM_TYPE_256_OUT_COND) {
-            l_res = l_list_tmp->data;
-            break;
-        }
-    }
-    dap_list_free(l_list_out_items);
-    if (a_out_num) {
-        *a_out_num = l_prev_cond_idx;
-    }
-    return l_res;
-}
-
diff --git a/modules/common/include/dap_chain_common.h b/modules/common/include/dap_chain_common.h
index 58e0e3250ff5b9d73548116c711e5091d5af5b5c..570c0ad518be4cf006d04c7634fb4c6a63a4c876 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
@@ -211,17 +211,15 @@ 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 uint32_t dap_chain_tx_item_type_t;
 
 
 typedef struct dap_chain_receipt{
     dap_chain_net_srv_uid_t srv_uid; // Service UID
     dap_chain_net_srv_price_unit_uid_t units_type;
     uint64_t units; // Unit of service (seconds, megabytes, etc.) Only for SERV_CLASS_PERMANENT
-    union {
-        uint64_t value_datoshi; // Receipt value
-        uint256_t value_datoshi_256;
-    };
+    uint64_t value_datoshi; // Receipt value
 } dap_chain_receipt_info_t;
 
 #ifdef __cplusplus
@@ -284,8 +282,8 @@ uint64_t dap_chain_uint256_to(uint256_t a_from);
 
 char *dap_chain_balance_print(uint256_t a_balance);
 char *dap_chain_balance_to_coins(uint256_t a_balance);
-uint256_t dap_chain_balance_scan(char *a_balance);
-uint256_t dap_chain_coins_to_balance(char *a_coins);
+uint256_t dap_chain_balance_scan(const char *a_balance);
+uint256_t dap_chain_coins_to_balance(const char *a_coins);
 
 /**
  * @brief dap_chain_hash_to_str
diff --git a/modules/common/include/dap_chain_datum.h b/modules/common/include/dap_chain_datum.h
index 88f8dc13dd88136ba32cd18574f7035b19009d1d..a657e20d69e964b9b53cb97e8a8a6317ba33b871 100644
--- a/modules/common/include/dap_chain_datum.h
+++ b/modules/common/include/dap_chain_datum.h
@@ -58,7 +58,6 @@
 /// Token
 /// Simple token decl
 #define DAP_CHAIN_DATUM_TOKEN_DECL           0xf000
-#define DAP_CHAIN_DATUM_256_TOKEN_DECL       0xf001 // 256
 #define DAP_CHAIN_DATUM_TOKEN_EMISSION       0xf100
 #define DAP_CHAIN_DATUM_TOKEN_DISMISSAL      0xf200
 
@@ -84,8 +83,6 @@
             s = "DATUM_CUSTOM"; break;      \
         case DAP_CHAIN_DATUM_TOKEN_DECL:    \
             s = "DATUM_TOKEN_DECL"; break;  \
-        case DAP_CHAIN_DATUM_256_TOKEN_DECL:    \
-            s = "DATUM_256_TOKEN_DECL"; break;  \
         case DAP_CHAIN_DATUM_TOKEN_EMISSION:\
             s = "DATUM_TOKEN_EMISSION"; break;\
         default:                            \
diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h
index efdb862da715075293eb0c869bdcc234ba9ef692..36feedde4bba31592f7fefadd12656b5586b624b 100644
--- a/modules/common/include/dap_chain_datum_token.h
+++ b/modules/common/include/dap_chain_datum_token.h
@@ -114,13 +114,13 @@ typedef struct dap_chain_datum_token{
 
 // 256
 // Simple private token decl
-#define DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE           0x0005
+#define DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE               0x0005
 // Extended declaration of privatetoken with in-time control
-#define DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL     0x0006
+#define DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL         0x0006
 // Token update
-#define DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE   0x0007
+#define DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE       0x0007
 // Open token with now ownership
-#define DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC           0x0008
+#define DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC               0x0008
 
 
 // Macros for token flags
diff --git a/modules/common/include/dap_chain_datum_tx.h b/modules/common/include/dap_chain_datum_tx.h
index e36f33ac1c2795341430373c40bec348010b4cf0..c6b9c79f3d4e87c4fa817ab9586eea1d93714067 100644
--- a/modules/common/include/dap_chain_datum_tx.h
+++ b/modules/common/include/dap_chain_datum_tx.h
@@ -79,7 +79,7 @@ int dap_chain_datum_tx_add_item(dap_chain_datum_tx_t **a_tx, const uint8_t *a_it
  *
  * return summary value from inserted items
  */
-uint64_t dap_chain_datum_tx_add_in_item_list(dap_chain_datum_tx_t **a_tx, dap_list_t *a_list_used_out);
+uint256_t dap_chain_datum_tx_add_in_item_list(dap_chain_datum_tx_t **a_tx, dap_list_t *a_list_used_out);
 
 /**
  * Create 'in' item and insert to transaction
diff --git a/modules/common/include/dap_chain_datum_tx_in.h b/modules/common/include/dap_chain_datum_tx_in.h
index 780c710c9aaa8d10cff8bd14b915b502121db4d8..b9fcbc2801aacc75ed0ed7b8dc6f273e8e9cf166 100644
--- a/modules/common/include/dap_chain_datum_tx_in.h
+++ b/modules/common/include/dap_chain_datum_tx_in.h
@@ -48,6 +48,5 @@ typedef struct list_used_item {
     dap_chain_hash_fast_t tx_hash_fast;
     uint32_t num_idx_out;
     uint8_t padding[4];
-    uint64_t value;
-//dap_chain_tx_out_t *tx_out;
+    uint256_t value;
 } list_used_item_t;
diff --git a/modules/common/include/dap_chain_datum_tx_items.h b/modules/common/include/dap_chain_datum_tx_items.h
index e2d7da798704dda829409178117c537a259f1c9a..7682123a68df5fd9c02aaab274d4e4ddd4d3fe2f 100644
--- a/modules/common/include/dap_chain_datum_tx_items.h
+++ b/modules/common/include/dap_chain_datum_tx_items.h
@@ -113,7 +113,7 @@ dap_chain_256_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_cha
  *
  * return item, NULL Error
  */
-dap_chain_256_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap_enc_key_t *a_key, dap_chain_net_srv_uid_t a_srv_uid,
+dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap_enc_key_t *a_key, dap_chain_net_srv_uid_t a_srv_uid,
                                                                              uint256_t a_value, uint256_t a_value_max_per_unit,
                                                                              dap_chain_net_srv_price_unit_uid_t a_unit,
                                                                              const void *a_params, size_t a_params_size);
@@ -122,7 +122,7 @@ dap_chain_256_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap
  *
  * return item, NULL Error
  */
-dap_chain_256_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap_chain_net_srv_uid_t a_srv_uid,
+dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap_chain_net_srv_uid_t a_srv_uid,
                                                                                  dap_chain_net_id_t a_net_id, const char *a_token, uint256_t a_value,
                                                                                  const void *a_params, uint32_t a_params_size);
 /**
@@ -130,7 +130,7 @@ dap_chain_256_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange
  *
  * return item, NULL Error
  */
-dap_chain_256_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, long double a_fee_value,
                                                                                dap_chain_addr_t *a_fee_addr, dap_chain_addr_t *a_hldr_addr,
                                                                                const void *a_params, uint32_t a_params_size);
 /**
@@ -163,4 +163,3 @@ uint8_t* dap_chain_datum_tx_item_get( dap_chain_datum_tx_t *a_tx, int *a_item_id
 dap_list_t* dap_chain_datum_tx_items_get(dap_chain_datum_tx_t *a_tx, dap_chain_tx_item_type_t a_type, int *a_item_count);
 // Get conditional out item with it's idx
 dap_chain_tx_out_cond_t *dap_chain_datum_tx_out_cond_get(dap_chain_datum_tx_t *a_tx, int *a_out_num);
-dap_chain_256_tx_out_cond_t *dap_chain_datum_256_tx_out_cond_get(dap_chain_datum_tx_t *a_tx, int *a_out_num);
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 de61d36934ec879e6fd58cb180acea921a4b8145..f98afa1ac91b82438cacbac2af771d036bd95e71 100644
--- a/modules/common/include/dap_chain_datum_tx_out_cond.h
+++ b/modules/common/include/dap_chain_datum_tx_out_cond.h
@@ -51,14 +51,14 @@ DAP_STATIC_INLINE const char *dap_chain_tx_out_cond_subtype_to_str(dap_chain_tx_
  * @struct dap_chain_tx_out
  * @brief Transaction item out_cond
  */
-typedef struct dap_chain_tx_out_cond {      // Absolete
+typedef struct dap_chain_tx_out_cond {
     struct {
         /// Transaction item type
         dap_chain_tx_item_type_t item_type;
         /// Condition subtype
         dap_chain_tx_out_cond_subtype_t subtype;
         /// Number of Datoshis ( DAP/10^9 ) to be reserver for service
-        uint64_t value;
+        uint256_t value;
         /// When time expires this output could be used only by transaction owner
         dap_chain_time_t ts_expires;
     } header;
@@ -72,7 +72,7 @@ typedef struct dap_chain_tx_out_cond {      // Absolete
             /// Price unit thats used to check price max
             dap_chain_net_srv_price_unit_uid_t unit;
             /// Maximum price per unit
-            uint64_t unit_price_max_datoshi;
+            uint256_t unit_price_max_datoshi;
         } srv_pay;
         struct {
             // Service uid that only could be used for this outout
@@ -82,7 +82,7 @@ typedef struct dap_chain_tx_out_cond {      // Absolete
             // Chain network to change to
             dap_chain_net_id_t net_id;
             // Total amount of datoshi to change to
-            uint64_t value;
+            uint256_t value;
         } srv_xchange;
         struct {
             // Service uid that only could be used for this outout
@@ -104,14 +104,14 @@ typedef struct dap_chain_tx_out_cond {      // Absolete
  * @struct dap_chain_tx_out
  * @brief Transaction item out_cond
  */
-typedef struct dap_chain_256_tx_out_cond {
+typedef struct dap_chain_tx_out_cond_old {      // Obsolete
     struct {
         /// Transaction item type
         dap_chain_tx_item_type_t item_type;
         /// Condition subtype
         dap_chain_tx_out_cond_subtype_t subtype;
         /// Number of Datoshis ( DAP/10^9 ) to be reserver for service
-        uint256_t value;
+        uint64_t value;
         /// When time expires this output could be used only by transaction owner
         dap_chain_time_t ts_expires;
     } header;
@@ -125,7 +125,7 @@ typedef struct dap_chain_256_tx_out_cond {
             /// Price unit thats used to check price max
             dap_chain_net_srv_price_unit_uid_t unit;
             /// Maximum price per unit
-            uint256_t unit_price_max_datoshi;
+            uint64_t unit_price_max_datoshi;
         } srv_pay;
         struct {
             // Service uid that only could be used for this outout
@@ -135,7 +135,7 @@ typedef struct dap_chain_256_tx_out_cond {
             // Chain network to change to
             dap_chain_net_id_t net_id;
             // Total amount of datoshi to change to
-            uint256_t value;
+            uint64_t value;
         } srv_xchange;
         struct {
             // Service uid that only could be used for this outout
@@ -150,8 +150,4 @@ typedef struct dap_chain_256_tx_out_cond {
     } subtype;
     uint32_t params_size; // Condition parameters size
     uint8_t params[]; // condition parameters, pkey, hash or smth like this
-} DAP_ALIGN_PACKED dap_chain_256_tx_out_cond_t;
-
-
-
-
+} DAP_ALIGN_PACKED dap_chain_tx_out_cond_old_t;
diff --git a/modules/consensus/none/dap_chain_cs_none.c b/modules/consensus/none/dap_chain_cs_none.c
index b797bb262353a0967f2ba54a00c043f0ffce6133..cbf2be24960f8cd72887122d2aa4fb21a69a277c 100644
--- a/modules/consensus/none/dap_chain_cs_none.c
+++ b/modules/consensus/none/dap_chain_cs_none.c
@@ -344,9 +344,8 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
         return ATOM_REJECT;
     }
     switch (l_datum->header.type_id) {
-        case DAP_CHAIN_DATUM_256_TOKEN_DECL: // 256
         case DAP_CHAIN_DATUM_TOKEN_DECL:{
-            if (dap_chain_ledger_token_load(a_chain->ledger, l_datum->data, l_datum->header.data_size))
+            if (dap_chain_ledger_token_load(a_chain->ledger, (dap_chain_datum_token_t *)l_datum->data, l_datum->header.data_size))
                 return ATOM_REJECT;
         }break;
         case DAP_CHAIN_DATUM_TOKEN_EMISSION: {
diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c
index 5137d4f72a4e28e17d7b5dbd4a97d1b575caf958..4e627b81fef772a986c14dd08deb05842c2fede5 100644
--- a/modules/mempool/dap_chain_mempool.c
+++ b/modules/mempool/dap_chain_mempool.c
@@ -112,11 +112,11 @@ dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_
     // 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)) || !a_value)
+            (a_addr_fee && !dap_chain_addr_check_sum(a_addr_fee)) || IS_ZERO_256(a_value))
         return NULL;
 
     // find the transactions from which to take away coins
-    uint256_t l_value_transfer = 0; // how many coins to transfer
+    uint256_t l_value_transfer = {}; // how many coins to transfer
     uint256_t l_value_need;
     SUM_256_256(a_value, a_value_fee, &l_value_need);
     dap_list_t *l_list_used_out = dap_chain_ledger_get_list_tx_outs_with_val(a_chain->ledger, a_token_ticker,
@@ -129,8 +129,8 @@ dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_
     dap_chain_datum_tx_t *l_tx = dap_chain_datum_tx_create();
     // add 'in' items
     {
-        uint64_t l_value_to_items = dap_chain_datum_tx_add_in_item_list(&l_tx, l_list_used_out);
-        assert(l_value_to_items == l_value_transfer);
+        uint256_t l_value_to_items = dap_chain_datum_tx_add_in_item_list(&l_tx, l_list_used_out);
+        assert(EQUAL_256(l_value_to_items, l_value_transfer));
         dap_list_free_full(l_list_used_out, free);
     }
     // add 'out' items
@@ -186,24 +186,27 @@ int dap_chain_mempool_tx_create_massive( dap_chain_t * a_chain, dap_enc_key_t *a
         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],
-        uint64_t a_value, uint64_t a_value_fee,size_t a_tx_num)
+        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)) || !a_value || !a_tx_num){
+            (a_addr_fee && !dap_chain_addr_check_sum(a_addr_fee)) || IS_ZERO_256(a_value) || !a_tx_num){
         log_it(L_ERROR, "Wrong parameters in dap_chain_mempool_tx_create_massive() call");
         return -1;
 
     }
-    dap_global_db_obj_t * l_objs = DAP_NEW_Z_SIZE(dap_global_db_obj_t, (a_tx_num+1)*sizeof (dap_global_db_obj_t) );
+    dap_global_db_obj_t * l_objs = DAP_NEW_Z_SIZE(dap_global_db_obj_t, (a_tx_num + 1) * sizeof (dap_global_db_obj_t));
 
 
 
     // Search unused out:
-    uint64_t l_value_need =a_tx_num*( a_value + a_value_fee );
-    uint64_t l_value_transfer = 0; // how many coins to transfer
-    log_it(L_DEBUG,"Create %"DAP_UINT64_FORMAT_U" transactions, summary %Lf.7", a_tx_num,dap_chain_datoshi_to_coins(l_value_need) ) ;
+    uint256_t l_single_val = {};
+    SUM_256_256(a_value, a_value_fee, &l_single_val);
+    uint256_t l_value_need = {};
+    MULT_256_256(dap_chain_uint256_from(a_tx_num), l_single_val, &l_value_need);
+    uint256_t l_value_transfer = {}; // how many coins to transfer
+    log_it(L_DEBUG,"Create %"DAP_UINT64_FORMAT_U" transactions, summary %s", a_tx_num, dap_chain_balance_to_coins(l_value_need)) ;
     dap_list_t *l_list_used_out = dap_chain_ledger_get_list_tx_outs_with_val(a_chain->ledger, a_token_ticker,
                                                                              a_addr_from, l_value_need, &l_value_transfer);
     if (!l_list_used_out) {
@@ -218,52 +221,52 @@ int dap_chain_mempool_tx_create_massive( dap_chain_t * a_chain, dap_enc_key_t *a
 
         // create empty transaction
         dap_chain_datum_tx_t *l_tx_new = dap_chain_datum_tx_create();
-        uint64_t l_value_back=0;
+        uint256_t l_value_back = {};
         // add 'in' items
         dap_list_t *l_list_tmp = l_list_used_out;
-        uint64_t l_value_to_items = 0; // how many coins to transfer
+        uint256_t l_value_to_items = {}; // how many coins to transfer
 
         // Add in and remove out used items
         while(l_list_tmp) {
-            list_used_item_t *item = l_list_tmp->data;
+            list_used_item_t *l_item = l_list_tmp->data;
             char l_in_hash_str[70];
 
-            dap_chain_hash_fast_to_str(&item->tx_hash_fast,l_in_hash_str,sizeof (l_in_hash_str) );
+            dap_chain_hash_fast_to_str(&l_item->tx_hash_fast,l_in_hash_str,sizeof (l_in_hash_str) );
 
-            if(dap_chain_datum_tx_add_in_item(&l_tx_new, &item->tx_hash_fast, (uint32_t) item->num_idx_out) == 1) {
-                l_value_to_items += item->value;
-                log_it(L_DEBUG,"Added input %s with %"DAP_UINT64_FORMAT_U" datoshi",l_in_hash_str, item->value);
+            if(dap_chain_datum_tx_add_in_item(&l_tx_new, &l_item->tx_hash_fast, (uint32_t)l_item->num_idx_out) == 1) {
+                SUM_256_256(l_value_to_items, l_item->value, &l_value_to_items);
+                log_it(L_DEBUG, "Added input %s with %s datoshi", l_in_hash_str, dap_chain_balance_print(l_item->value));
             }else{
-                log_it(L_WARNING,"Can't add input from %s with %"DAP_UINT64_FORMAT_U" datoshi",l_in_hash_str, item->value);
+                log_it(L_WARNING, "Can't add input from %s with %s datoshi", l_in_hash_str, dap_chain_balance_print(l_item->value));
             }
             l_list_used_out = l_list_tmp->next;
             DAP_DELETE(l_list_tmp->data);
             dap_list_free1(l_list_tmp);
             l_list_tmp = l_list_used_out;
-            if ( l_value_to_items >= l_value_transfer )
+            if (compare256(l_value_to_items, l_value_transfer) != -1)
                 break;
         }
-        if ( l_value_to_items <  (a_value + a_value_fee) ){
-            log_it(L_ERROR,"Not enought values on output %"DAP_UINT64_FORMAT_U" to produce enought ins %"DAP_UINT64_FORMAT_U" when need %"DAP_UINT64_FORMAT_U"",
-                   l_value_to_items, l_value_transfer,
-                   l_value_need);
+        if (compare256(l_value_to_items, l_single_val) == -1) {
+            log_it(L_ERROR, "Not enought values on output %s to produce enought ins %s when need %s",
+                   dap_chain_balance_print(l_value_to_items), dap_chain_balance_print(l_value_transfer),
+                   dap_chain_balance_print(l_value_need));
             DAP_DELETE(l_objs);
             return -5;
         }
 
         // add 'out' items
-        uint64_t l_value_pack = 0; // how much coin add to 'out' items
+        uint256_t l_value_pack = {}; // how much coin add to 'out' items
         if(dap_chain_datum_tx_add_out_item(&l_tx_new, a_addr_to, a_value) == 1) {
-            l_value_pack += a_value;
+            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)
-                    l_value_pack += a_value_fee;
+                    SUM_256_256(l_value_pack, a_value_fee, &l_value_pack);
             }
         }
         // coin back
-        l_value_back = l_value_transfer - l_value_pack;
-        if(l_value_back) {
+        SUBTRACT_256_256(l_value_transfer, l_value_pack, &l_value_back);
+        if (!IS_ZERO_256(l_value_back)) {
             //log_it(L_DEBUG,"Change back %"DAP_UINT64_FORMAT_U"", l_value_back);
             if(dap_chain_datum_tx_add_out_item(&l_tx_new, a_addr_from, l_value_back) != 1) {
                 dap_chain_datum_tx_delete(l_tx_new);
@@ -282,7 +285,7 @@ int dap_chain_mempool_tx_create_massive( dap_chain_t * a_chain, dap_enc_key_t *a
         dap_chain_hash_fast_t l_tx_new_hash;
         dap_hash_fast(l_tx_new, l_tx_size, &l_tx_new_hash);
         // If we have value back - update balance cache
-        if(l_value_back) {
+        if (!IS_ZERO_256(l_value_back)) {
             //log_it(L_DEBUG,"We have value back %"DAP_UINT64_FORMAT_U" now lets see how many outputs we have", l_value_back);
             int l_item_count = 0;
             dap_list_t *l_list_out_items = dap_chain_datum_tx_items_get( l_tx_new, TX_ITEM_TYPE_OUT,
@@ -312,7 +315,7 @@ int dap_chain_mempool_tx_create_massive( dap_chain_t * a_chain, dap_enc_key_t *a
             //log_it(L_DEBUG,"Checked all outputs");
             dap_list_free( l_list_out_items);
         }
-        l_value_transfer -= l_value_pack;
+        SUBTRACT_256_256(l_value_transfer, l_value_pack, &l_value_transfer);
 
         // Now produce datum
         dap_chain_datum_t *l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, l_tx_new, l_tx_size);
@@ -322,7 +325,7 @@ int dap_chain_mempool_tx_create_massive( dap_chain_t * a_chain, dap_enc_key_t *a
 
         l_objs[i].key = dap_chain_hash_fast_to_str_new(&l_tx_new_hash);
         //continue;
-        l_objs[i].value = (uint8_t*) l_datum;
+        l_objs[i].value = (uint8_t *)l_datum;
         l_objs[i].value_len = l_tx_size + sizeof(l_datum->header);
         log_it(L_DEBUG, "Prepared obj with key %s (value_len = %"DAP_UINT64_FORMAT_U")",
                l_objs[i].key? l_objs[i].key :"NULL" , l_objs[i].value_len );
@@ -364,10 +367,10 @@ dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t *
     // create empty transaction
     dap_chain_datum_tx_t *l_tx = dap_chain_datum_tx_create();
 
-    uint16_t pos=0;
+    uint16_t pos = 0;
     dap_chain_datum_tx_add_item(&l_tx, (byte_t*) l_receipt);
     pos++;
-    uint64_t l_value_send = l_receipt->receipt_info.value_datoshi;
+    uint256_t l_value_send = dap_chain_uint256_from(l_receipt->receipt_info.value_datoshi);
 
     // add 'in_cond' items
     dap_chain_datum_tx_t *l_tx_cond = dap_chain_ledger_tx_find_by_hash(l_ledger, a_tx_prev_hash);
@@ -377,10 +380,10 @@ dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t *
         dap_chain_datum_tx_t *l_tx_tmp;
         dap_chain_hash_fast_t l_tx_cur_hash = { 0 }; // start hash
         dap_chain_tx_out_cond_t *l_tmp_cond;
-        uint64_t l_value_cond = 0;
+        uint256_t l_value_cond = {};
         int l_tmp_cond_idx;
         // Find all transactions
-        while (l_value_cond < l_value_send) {
+        while (compare256(l_value_cond, l_value_send) == -1) {
             l_tx_tmp = dap_chain_ledger_tx_cache_find_out_cond(l_ledger, &l_tx_cur_hash, &l_tmp_cond, &l_tmp_cond_idx, NULL);
             if (!l_tx_tmp) {
                 break;
@@ -393,18 +396,18 @@ dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t *
                 continue;
             if (l_tmp_cond->subtype.srv_pay.unit.uint32 != l_out_cond->subtype.srv_pay.unit.uint32)
                 continue;
-            if (l_tmp_cond->subtype.srv_pay.unit_price_max_datoshi != l_out_cond->subtype.srv_pay.unit_price_max_datoshi)
+            if (!EQUAL_256(l_tmp_cond->subtype.srv_pay.unit_price_max_datoshi, l_out_cond->subtype.srv_pay.unit_price_max_datoshi))
                 continue;
             if (memcmp(&l_tmp_cond->subtype.srv_pay.pkey_hash, &l_out_cond->subtype.srv_pay.pkey_hash, sizeof(dap_chain_hash_fast_t)))
                 continue;
             l_value_cond = l_tmp_cond->header.value;
         }
-        if (l_value_cond < l_value_send) {
+        if (compare256(l_value_cond, l_value_send) == -1) {
             log_it(L_WARNING, "Requested conditional transaction is already used out");
             return NULL;
         }
     }
-    if (dap_chain_datum_tx_add_in_cond_item(&l_tx, a_tx_prev_hash, l_prev_cond_idx, pos-1) != 0 ){
+    if (dap_chain_datum_tx_add_in_cond_item(&l_tx, a_tx_prev_hash, l_prev_cond_idx, pos - 1) != 0 ){
         dap_chain_datum_tx_delete(l_tx);
         log_it( L_ERROR, "Cant add tx cond input");
         return NULL;
@@ -421,7 +424,7 @@ dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t *
     size_t l_size = dap_chain_datum_item_tx_get_size((uint8_t *)l_out_cond);
     dap_chain_tx_out_cond_t *l_out_cond_new = DAP_NEW_Z_SIZE(dap_chain_tx_out_cond_t, l_size);
     memcpy(l_out_cond_new, l_out_cond, l_size);
-    l_out_cond_new->header.value -= l_value_send;
+    SUBTRACT_256_256(l_out_cond_new->header.value, l_value_send, &l_out_cond_new->header.value);
     dap_chain_datum_tx_add_item(&l_tx, (const uint8_t *)l_out_cond_new);
     DAP_DELETE(l_out_cond_new);
 
@@ -468,19 +471,20 @@ static dap_chain_datum_t* dap_chain_tx_create_cond(dap_chain_net_t * a_net,
         dap_enc_key_t *a_key_from, dap_enc_key_t *a_key_cond,
         const dap_chain_addr_t* a_addr_from,
         const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
-        uint64_t a_value,uint64_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
-        dap_chain_net_srv_uid_t a_srv_uid, uint64_t a_value_fee, const void *a_cond, size_t a_cond_size)
+        uint256_t a_value, uint256_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
+        dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value_fee, const void *a_cond, size_t a_cond_size)
 {
     dap_ledger_t * l_ledger = a_net ? dap_chain_ledger_by_net_name( a_net->pub.name ) : NULL;
     // check valid param
     if(!a_net || ! l_ledger || !a_key_from || !a_key_from->priv_key_data || !a_key_from->priv_key_data_size ||
             !dap_chain_addr_check_sum(a_addr_from) ||
-            !a_value)
+            IS_ZERO_256(a_value))
         return NULL;
 
     // find the transactions from which to take away coins
-    uint64_t l_value_transfer = 0; // how many coins to transfer
-    uint64_t l_value_need = a_value + a_value_fee;
+    uint256_t l_value_transfer = {}; // how many coins to transfer
+    uint256_t l_value_need = {};
+    SUM_256_256(a_value, a_value_fee, &l_value_need);
     // list of transaction with 'out' items
     dap_list_t *l_list_used_out = dap_chain_ledger_get_list_tx_outs_with_val(l_ledger, a_token_ticker,
                                                                              a_addr_from, l_value_need, &l_value_transfer);
@@ -493,24 +497,25 @@ static dap_chain_datum_t* dap_chain_tx_create_cond(dap_chain_net_t * a_net,
     dap_chain_datum_tx_t *l_tx = dap_chain_datum_tx_create();
     // add 'in' items
     {
-        uint64_t l_value_to_items = dap_chain_datum_tx_add_in_item_list(&l_tx, l_list_used_out);
-        assert(l_value_to_items == l_value_transfer);
+        uint256_t l_value_to_items = dap_chain_datum_tx_add_in_item_list(&l_tx, l_list_used_out);
+        assert(EQUAL_256(l_value_to_items, l_value_transfer));
         dap_list_free_full(l_list_used_out, free);
     }
     // add 'out_cond' and 'out' items
     {
-        uint64_t l_value_pack = 0; // how much coin add to 'out' items
+        uint256_t l_value_pack = {}; // how much coin add to 'out' items
         if(dap_chain_datum_tx_add_out_cond_item(&l_tx, a_key_cond, a_srv_uid, a_value, a_value_per_unit_max, a_unit, a_cond,
                 a_cond_size) == 1) {
-            l_value_pack += a_value;
+            SUM_256_256(l_value_pack, a_value, &l_value_pack);
             // transaction fee
-            if(a_value_fee) {
+            if (!IS_ZERO_256(a_value_fee)) {
                 // TODO add condition with fee for mempool-as-service
             }
         }
         // coin back
-        uint64_t l_value_back = l_value_transfer - l_value_pack;
-        if(l_value_back) {
+        uint256_t l_value_back = {};
+        SUBTRACT_256_256(l_value_transfer, l_value_pack, &l_value_back);
+        if (!IS_ZERO_256(l_value_back)) {
             if(dap_chain_datum_tx_add_out_item(&l_tx, a_addr_from, l_value_back) != 1) {
                 dap_chain_datum_tx_delete(l_tx);
                 log_it( L_ERROR, "Cant add coin back output");
@@ -555,8 +560,8 @@ dap_chain_hash_fast_t* dap_chain_proc_tx_create_cond(dap_chain_net_t * a_net,
         dap_enc_key_t *a_key_from, dap_enc_key_t *a_key_cond,
         const dap_chain_addr_t* a_addr_from,
         const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
-        uint64_t a_value,uint64_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
-        dap_chain_net_srv_uid_t a_srv_uid, uint64_t a_value_fee, const void *a_cond, size_t a_cond_size)
+        uint256_t a_value, uint256_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
+        dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value_fee, const void *a_cond, size_t a_cond_size)
 {
 
     dap_chain_t *l_chain = NULL;
@@ -569,8 +574,8 @@ dap_chain_hash_fast_t* dap_chain_proc_tx_create_cond(dap_chain_net_t * a_net,
             return NULL;
     // Make transfer transaction
     dap_chain_datum_t *l_datum = dap_chain_tx_create_cond(a_net,a_key_from, a_key_cond, a_addr_from,
-            a_token_ticker,a_value,a_value_per_unit_max, a_unit,
-            a_srv_uid, a_value_fee, a_cond, a_cond_size);
+                                                          a_token_ticker, a_value, a_value_per_unit_max, a_unit,
+                                                          a_srv_uid, a_value_fee, a_cond, a_cond_size);
 
     if(!l_datum)
         return NULL;
@@ -597,13 +602,13 @@ dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond(dap_chain_net_t * a_net,
         dap_enc_key_t *a_key_from, dap_enc_key_t *a_key_cond,
         const dap_chain_addr_t* a_addr_from,
         const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
-        uint64_t a_value,uint64_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
-        dap_chain_net_srv_uid_t a_srv_uid, uint64_t a_value_fee, const void *a_cond, size_t a_cond_size)
+        uint256_t a_value, uint256_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
+        dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value_fee, const void *a_cond, size_t a_cond_size)
 {
     // Make transfer transaction
-    dap_chain_datum_t *l_datum = dap_chain_tx_create_cond(a_net,a_key_from, a_key_cond, a_addr_from,
-            a_token_ticker,a_value,a_value_per_unit_max, a_unit,
-            a_srv_uid, a_value_fee, a_cond, a_cond_size);
+    dap_chain_datum_t *l_datum = dap_chain_tx_create_cond(a_net, a_key_from, a_key_cond, a_addr_from,
+                                                          a_token_ticker,a_value,a_value_per_unit_max, a_unit,
+                                                          a_srv_uid, a_value_fee, a_cond, a_cond_size);
 
     if(!l_datum)
         return NULL;
diff --git a/modules/mempool/include/dap_chain_mempool.h b/modules/mempool/include/dap_chain_mempool.h
index b4b81ae28befc9c62393864fb5c46690f7625bd6..631459d42c9959e90e2884f7b14942945313f5be 100644
--- a/modules/mempool/include/dap_chain_mempool.h
+++ b/modules/mempool/include/dap_chain_mempool.h
@@ -55,20 +55,20 @@ dap_chain_hash_fast_t* dap_chain_proc_tx_create_cond(dap_chain_net_t * a_net,
         dap_enc_key_t *a_key_from, dap_enc_key_t *a_key_cond,
         const dap_chain_addr_t* a_addr_from,
         const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
-        uint64_t a_value,uint64_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
-        dap_chain_net_srv_uid_t a_srv_uid, uint64_t a_value_fee, const void *a_cond, size_t a_cond_size);
+        uint256_t a_value, uint256_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
+        dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value_fee, const void *a_cond, size_t a_cond_size);
 dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond(dap_chain_net_t * a_net,
         dap_enc_key_t *a_key_from, dap_enc_key_t *a_key_cond,
         const dap_chain_addr_t* a_addr_from,
         const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
-        uint64_t a_value,uint64_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
-        dap_chain_net_srv_uid_t a_srv_uid, uint64_t a_value_fee, const void *a_cond, size_t a_cond_size);
+        uint256_t a_value, uint256_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
+        dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value_fee, const void *a_cond, size_t a_cond_size);
 
 dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t * a_net,dap_chain_hash_fast_t *a_tx_prev_hash,
         const dap_chain_addr_t* a_addr_to, dap_enc_key_t * l_key_tx_sign, dap_chain_datum_tx_receipt_t * l_receipt, size_t l_receipt_size);
 
-int dap_chain_mempool_tx_create_massive( dap_chain_t * a_chain, dap_enc_key_t *a_key_from,
+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],
-        uint64_t a_value, uint64_t a_value_fee,size_t a_tx_num);
+        uint256_t a_value, uint256_t a_value_fee, size_t a_tx_num);
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index b5907395a348d991cbf2e3de864d832c612390e1..69b5e3706e062811ed8eed6ca26956b0f9a7f7f1 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -2599,9 +2599,8 @@ int dap_chain_net_verify_datum_for_add(dap_chain_net_t *a_net, dap_chain_datum_t
     switch ( a_datum->header.type_id) {
         case DAP_CHAIN_DATUM_TX:
             return dap_chain_ledger_tx_add_check( a_net->pub.ledger, (dap_chain_datum_tx_t*)a_datum->data );
-        case DAP_CHAIN_DATUM_256_TOKEN_DECL: // 256
         case DAP_CHAIN_DATUM_TOKEN_DECL:
-            return dap_chain_ledger_token_decl_add_check( a_net->pub.ledger, a_datum->data );
+            return dap_chain_ledger_token_decl_add_check( a_net->pub.ledger, (dap_chain_datum_token_t *)a_datum->data);
         case DAP_CHAIN_DATUM_TOKEN_EMISSION:
             return dap_chain_ledger_token_emission_add_check( a_net->pub.ledger, a_datum->data, a_datum->header.data_size );
         default: return 0;
@@ -2624,7 +2623,6 @@ void dap_chain_net_dump_datum(dap_string_t *a_str_out, dap_chain_datum_t *a_datu
         return;
     }
     switch (a_datum->header.type_id){
-        case DAP_CHAIN_DATUM_256_TOKEN_DECL:
         case DAP_CHAIN_DATUM_TOKEN_DECL:{
             size_t l_token_size = a_datum->header.data_size;
             dap_chain_datum_token_t * l_token = dap_chain_datum_token_read(a_datum->data, &l_token_size);
@@ -2934,7 +2932,7 @@ void dap_chain_net_dump_datum(dap_string_t *a_str_out, dap_chain_datum_t *a_datu
                                     dap_string_append_printf(a_str_out,"\ttx_prev_hash : %s\n", l_tx_prev_hash_str );
                                 } break;
                                 case TX_ITEM_TYPE_256_OUT_COND: { // 256
-                                    dap_chain_256_tx_out_cond_t * l_out = l_cur->data;
+                                    dap_chain_tx_out_cond_t * l_out = l_cur->data;
                                     dap_string_append_printf(a_str_out,"\tvalue: %s\n", dap_chain_balance_print(l_out->header.value) );
                                     switch ( l_out->header.subtype){
                                         case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY:{
@@ -2969,7 +2967,7 @@ void dap_chain_net_dump_datum(dap_string_t *a_str_out, dap_chain_datum_t *a_datu
                                     dap_string_append_printf(a_str_out,"\tparams_size : %u\n", l_out->params_size );
                                 } break;
                                 case TX_ITEM_TYPE_OUT_COND:{
-                                    dap_chain_tx_out_cond_t * l_out = l_cur->data;
+                                    dap_chain_tx_out_cond_old_t * l_out = l_cur->data;
                                     dap_string_append_printf(a_str_out,"\tvalue: %"DAP_UINT64_FORMAT_U"\n", l_out->header.value );
                                     switch ( l_out->header.subtype){
                                         case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY:{
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 5902c2be5337531df8a5cf19f97e4425d10e3ccd..fd583f31cadafe959f4ef204b1ad73bdc81e3643 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -3091,7 +3091,7 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply)
             return -8;
     }
 
-    dap_chain_datum_t * l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_256_TOKEN_DECL,
+    dap_chain_datum_t * l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_TOKEN_DECL,
                                                          l_datum_token,
                                                          sizeof(*l_datum_token) + l_datum_data_offset);
     size_t l_datum_size = dap_chain_datum_size(l_datum);
@@ -3429,8 +3429,7 @@ int com_tx_cond_create(int a_argc, char ** a_argv, char **a_str_reply)
     const char * l_net_name = NULL;
     const char * l_unit_str = NULL;
     const char * l_service_str = NULL;
-    uint64_t l_value_datoshi = 0;
-
+    uint256_t l_value_datoshi = {};
     const char * l_hash_out_type = NULL;
     dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-H", &l_hash_out_type);
     if(!l_hash_out_type)
@@ -3512,8 +3511,8 @@ int com_tx_cond_create(int a_argc, char ** a_argv, char **a_str_reply)
         return -9;
     }
 
-    l_value_datoshi = strtoll(l_value_datoshi_str, NULL, 10);
-    if(!l_value_datoshi) {
+    l_value_datoshi = dap_chain_balance_scan(l_value_datoshi_str);
+    if(IS_ZERO_256(l_value_datoshi)) {
         dap_chain_node_cli_set_reply_text(a_str_reply, "can't recognize value='%s' as a number", l_value_datoshi_str);
         return -10;
     }
@@ -3553,9 +3552,10 @@ int com_tx_cond_create(int a_argc, char ** a_argv, char **a_str_reply)
             addr_cond,
             NULL, l_token_ticker, l_value, 0, (const void*) &l_cond, sizeof(dap_chain_net_srv_abstract_t));
 */
-
+    uint256_t l_value_per_unit_max = {};
+    uint256_t l_value_fee = {};
     dap_chain_hash_fast_t *l_tx_cond_hash = dap_chain_mempool_tx_create_cond(l_net, l_key_from, l_key_cond, l_addr_from, l_token_ticker,
-            l_value_datoshi, 0, l_price_unit, l_srv_uid, 0, NULL, 0);
+            l_value_datoshi, l_value_per_unit_max, l_price_unit, l_srv_uid, l_value_fee, NULL, 0);
 
     dap_chain_wallet_close(l_wallet_from);
     dap_chain_wallet_close(l_wallet_cond);
@@ -3803,8 +3803,8 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
     const char * l_tx_num_str = NULL;
     size_t l_tx_num = 0;
 
-    uint64_t value = 0;
-    uint64_t value_fee = 0;
+    uint256_t l_value = {};
+    uint256_t l_value_fee = {};
     dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-from_wallet", &l_from_wallet_name);
     dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-to_addr", &addr_base58_to);
     dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-token", &l_token_ticker);
@@ -3817,11 +3817,11 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
 
     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)) {
-            value_fee = strtoull(str_tmp, NULL, 10);
+            l_value_fee = dap_chain_balance_scan(str_tmp);
         }
     }
     if(dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-value", &str_tmp)) {
-        value = strtoull(str_tmp, NULL, 10);
+        l_value = dap_chain_balance_scan(str_tmp);
     }
     if(!l_from_wallet_name) {
         dap_chain_node_cli_set_reply_text(str_reply, "tx_create requires parameter '-from_wallet'");
@@ -3831,11 +3831,11 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
         dap_chain_node_cli_set_reply_text(str_reply, "tx_create requires parameter '-to_addr'");
         return -1;
     }
-    if(!value) {
+    if(IS_ZERO_256(l_value)) {
         dap_chain_node_cli_set_reply_text(str_reply, "tx_create requires parameter '-value'");
         return -1;
     }
-    if(addr_base58_fee && !value_fee) {
+    if(addr_base58_fee && IS_ZERO_256(l_value_fee)) {
         dap_chain_node_cli_set_reply_text(str_reply,
                 "tx_create requires parameter '-value_fee' if '-fee' is specified");
         return -1;
@@ -3897,14 +3897,14 @@ 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,
                                addr_to, addr_fee,
-                               l_token_ticker, value, value_fee, l_tx_num);
+                               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, addr_to,
                 addr_fee,
-                l_token_ticker, value, 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);
diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c
index 8d465e0384bce935144bd03277f35b09c2845c81..01559c10eec8bb6dc91d4bf3971bfcbe56ea7d6d 100644
--- a/modules/net/dap_chain_node_cli_cmd_tx.c
+++ b/modules/net/dap_chain_node_cli_cmd_tx.c
@@ -273,9 +273,9 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
                                                 "\t\t SubType:\n",
                                      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_uint256_from(
-                                         ((dap_chain_tx_out_cond_t*)item)->header.value)),
-                                     ((dap_chain_tx_out_cond_t*)item)->header.value,
-                                     dap_chain_tx_out_cond_subtype_to_str(((dap_chain_tx_out_cond_t*)item)->header.subtype));
+                                         ((dap_chain_tx_out_cond_old_t*)item)->header.value)),
+                                     ((dap_chain_tx_out_cond_old_t*)item)->header.value,
+                                     dap_chain_tx_out_cond_subtype_to_str(((dap_chain_tx_out_cond_old_t*)item)->header.subtype));
             switch (((dap_chain_tx_out_cond_t*)item)->header.subtype) {
                 case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY:
                 l_hash_str_tmp = dap_chain_hash_fast_to_str_new(&((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.pkey_hash);
@@ -283,35 +283,35 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
                                                     "\t\t\t uid: 0x%016"DAP_UINT64_FORMAT_x"\n"
                                                     "\t\t\t pkey: %s\n"
                                                     "\t\t\t max price: %s (%"DAP_UINT64_FORMAT_U") \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_old_t*)item)->subtype.srv_pay.unit.uint32,
+                                         ((dap_chain_tx_out_cond_old_t*)item)->subtype.srv_pay.srv_uid.uint64,
                                          l_hash_str_tmp,
                                          dap_chain_balance_to_coins(dap_chain_uint256_from(
-                                             ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi)),
-                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi);
+                                             ((dap_chain_tx_out_cond_old_t*)item)->subtype.srv_pay.unit_price_max_datoshi)),
+                                         ((dap_chain_tx_out_cond_old_t*)item)->subtype.srv_pay.unit_price_max_datoshi);
                 DAP_FREE(l_hash_str_tmp);
                 break;
                 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,
+                                         ((dap_chain_tx_out_cond_old_t*)item)->subtype.srv_stake.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_old_t*)item)->subtype.srv_stake.fee_addr
                                              ),
-                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake.fee_value);
+                                         ((dap_chain_tx_out_cond_old_t*)item)->subtype.srv_stake.fee_value);
                 break;
                 case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE:
                 dap_string_append_printf(a_str_out, "\t\t\t uid: 0x%016"DAP_UINT64_FORMAT_x"\n"
                                                     "\t\t\t net id: 0x%016"DAP_UINT64_FORMAT_x"\n"
                                                     "\t\t\t token: %s\n"
                                                     "\t\t\t value: %s (%"DAP_UINT64_FORMAT_U")\n",
-                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.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_tx_out_cond_old_t*)item)->subtype.srv_xchange.srv_uid.uint64,
+                                         ((dap_chain_tx_out_cond_old_t*)item)->subtype.srv_xchange.net_id.uint64,
+                                         ((dap_chain_tx_out_cond_old_t*)item)->subtype.srv_xchange.token,
                                          dap_chain_balance_to_coins(dap_chain_uint256_from(
-                                             ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.value)),
-                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.value);
+                                             ((dap_chain_tx_out_cond_old_t*)item)->subtype.srv_xchange.value)),
+                                         ((dap_chain_tx_out_cond_old_t*)item)->subtype.srv_xchange.value);
                 break;
                 default: break;
             }
@@ -323,23 +323,23 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
                                                 "\t\t\t value: %s (%s)\n"
                                                 "\t\t\t subtype: %s\n"
                                                 "\t\t SubType:\n",
-                                     dap_ctime_r((time_t*)((dap_chain_256_tx_out_cond_t*)item)->header.ts_expires, l_tmp_buf),
-                                     dap_chain_balance_to_coins(((dap_chain_256_tx_out_cond_t*)item)->header.value),
-                                     dap_chain_balance_print(((dap_chain_256_tx_out_cond_t*)item)->header.value),
-                                     dap_chain_tx_out_cond_subtype_to_str(((dap_chain_256_tx_out_cond_t*)item)->header.subtype)
+                                     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_tx_out_cond_t*)item)->header.value),
+                                     dap_chain_balance_print(((dap_chain_tx_out_cond_t*)item)->header.value),
+                                     dap_chain_tx_out_cond_subtype_to_str(((dap_chain_tx_out_cond_t*)item)->header.subtype)
             );
-            switch (((dap_chain_256_tx_out_cond_t*)item)->header.subtype) {
+            switch (((dap_chain_tx_out_cond_t*)item)->header.subtype) {
             case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY:
-                l_hash_str_tmp = dap_chain_hash_fast_to_str_new(&((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_pay.pkey_hash);
+                l_hash_str_tmp = dap_chain_hash_fast_to_str_new(&((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.pkey_hash);
                 dap_string_append_printf(a_str_out, "\t\t\t unit: 0x%08x\n"
                                                     "\t\t\t uid: 0x%016"DAP_UINT64_FORMAT_x"\n"
                                                     "\t\t\t pkey: %s\n"
                                                     "\t\t\t max price: %s (%s) \n",
-                                         ((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_pay.unit.uint32,
-                                         ((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_pay.srv_uid.uint64,
+                                         ((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,
                                          l_hash_str_tmp,
-                                         dap_chain_balance_to_coins(((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi),
-                                         dap_chain_balance_print(((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi)
+                                         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)
                 );
                 DAP_FREE(l_hash_str_tmp);
                 break;
@@ -347,11 +347,11 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
                 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_256_tx_out_cond_t*)item)->subtype.srv_stake.srv_uid.uint64,
+                                        ((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake.srv_uid.uint64,
                                         dap_chain_addr_to_str(
-                                             &((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_stake.fee_addr
+                                             &((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake.fee_addr
                                         ),
-                                        ((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_stake.fee_value
+                                        ((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake.fee_value
                 );
                 break;
             case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE:
@@ -359,11 +359,11 @@ static void 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_256_tx_out_cond_t*)item)->subtype.srv_xchange.srv_uid.uint64,
-                                         ((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_xchange.net_id.uint64,
-                                         ((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_xchange.token,
-                                         dap_chain_balance_to_coins(((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_xchange.value),
-                                         dap_chain_balance_print(((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_xchange.value)
+                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.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),
+                                         dap_chain_balance_print(((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.value)
                 );
                 break;
             }
@@ -1021,7 +1021,6 @@ static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger
             switch (l_datum->header.type_id) {
 
                 // token
-                case DAP_CHAIN_DATUM_256_TOKEN_DECL: // 256
                 case DAP_CHAIN_DATUM_TOKEN_DECL: {
                     // no token necessary for addr
                     if(a_filtr_addr_base58) {
diff --git a/modules/wallet/dap_chain_wallet.c b/modules/wallet/dap_chain_wallet.c
index aca3c351158194545b7512780b5b9913b728ea28..c8395ff5df541fba301e02648480d290b4af239a 100644
--- a/modules/wallet/dap_chain_wallet.c
+++ b/modules/wallet/dap_chain_wallet.c
@@ -423,15 +423,11 @@ dap_chain_wallet_t * dap_chain_wallet_open(const char * a_wallet_name, const cha
  * @param a_net_id
  * @return
  */
-uint128_t dap_chain_wallet_get_balance(dap_chain_wallet_t *a_wallet, dap_chain_net_id_t a_net_id, const char *a_token_ticker)
+uint256_t dap_chain_wallet_get_balance(dap_chain_wallet_t *a_wallet, dap_chain_net_id_t a_net_id, const char *a_token_ticker)
 {
     dap_chain_net_t *l_net = dap_chain_net_by_id(a_net_id);
     dap_chain_addr_t *l_addr =dap_chain_wallet_get_addr(a_wallet, a_net_id);
-#ifdef DAP_GLOBAL_IS_INT128
-    uint128_t l_balance = 0;
-#else
-    uint128_t l_balance = {};
-#endif
+    uint256_t l_balance = {};
     if (l_net)
     {
         dap_ledger_t *l_ledger = l_net->pub.ledger;
diff --git a/modules/wallet/include/dap_chain_wallet.h b/modules/wallet/include/dap_chain_wallet.h
index f1b3e81e59162a3c0c2156e2e5f5baffb0f2bbc4..51ffd4c91ba18f5af2488f0d9855736e30211c31 100644
--- a/modules/wallet/include/dap_chain_wallet.h
+++ b/modules/wallet/include/dap_chain_wallet.h
@@ -58,6 +58,6 @@ size_t dap_chain_wallet_get_certs_number( dap_chain_wallet_t * a_wallet);
 dap_pkey_t * dap_chain_wallet_get_pkey( dap_chain_wallet_t * a_wallet,uint32_t a_key_idx);
 dap_enc_key_t * dap_chain_wallet_get_key( dap_chain_wallet_t * a_wallet,uint32_t a_key_idx);
 
-uint128_t dap_chain_wallet_get_balance(dap_chain_wallet_t *a_wallet, dap_chain_net_id_t a_net_id, const char *a_token_ticker);
+uint256_t dap_chain_wallet_get_balance(dap_chain_wallet_t *a_wallet, dap_chain_net_id_t a_net_id, const char *a_token_ticker);
 
 int dap_chain_wallet_save_file( dap_chain_wallet_t * a_wallet);