diff --git a/.gitignore b/.gitignore
index 3420055ff2b5d17db4c10b82f92d09f7b3533026..e97c609120476289487b69ea8f5b1a53eeaab3bc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,5 @@
 # Prerequisites
 build/*
-cmake-build-*/
 build_stretch/*
 test/build
 *.txt.user
@@ -68,9 +67,4 @@ Makefile
 cmake_install.cmake
 
 # Editor's temp files
-*~
-.idea/
-
-# OS files
-.DS_Store
-
+*~
\ No newline at end of file
diff --git a/3rdparty/cuttdb/CMakeLists.txt b/3rdparty/cuttdb/CMakeLists.txt
index 8cf9f34ac98198a42100658743882ac0b31a3bba..85118d55603a3f1ca1ff87cf1975ad36a793c625 100755
--- a/3rdparty/cuttdb/CMakeLists.txt
+++ b/3rdparty/cuttdb/CMakeLists.txt
@@ -29,7 +29,7 @@ add_library(${PROJECT_NAME} STATIC ${cuttdb_src} ${cuttdb_h})
 set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C)
 set_target_properties(${PROJECT_NAME} PROPERTIES COMPILER_LANGUAGE C)
 
-set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C)
+set_target_properties(dap_cuttdb PROPERTIES LINKER_LANGUAGE C)
 
 target_link_libraries(${PROJECT_NAME})
 
diff --git a/3rdparty/json-c-darwin/CMakeLists.txt b/3rdparty/json-c-darwin/CMakeLists.txt
index 455c70f283a430a482d5350b6a8e9e0fceddecdf..087c1f19bbd2e2854807660f25f0f5be4633145b 100644
--- a/3rdparty/json-c-darwin/CMakeLists.txt
+++ b/3rdparty/json-c-darwin/CMakeLists.txt
@@ -5,4 +5,4 @@ file(GLOB JSON_C_SRCS FILES *.c)
 file(GLOB JSON_C_HEADERS FILES *.h)
 
 add_library(${PROJECT_NAME} STATIC ${JSON_C_SRCS} ${JSON_C_HEADERS})
-target_include_directories(${PROJECT_NAME} PUBLIC . )
+target_include_directories(json-c PUBLIC . )
diff --git a/3rdparty/json-c/CMakeLists.txt b/3rdparty/json-c/CMakeLists.txt
index 455c70f283a430a482d5350b6a8e9e0fceddecdf..087c1f19bbd2e2854807660f25f0f5be4633145b 100644
--- a/3rdparty/json-c/CMakeLists.txt
+++ b/3rdparty/json-c/CMakeLists.txt
@@ -5,4 +5,4 @@ file(GLOB JSON_C_SRCS FILES *.c)
 file(GLOB JSON_C_HEADERS FILES *.h)
 
 add_library(${PROJECT_NAME} STATIC ${JSON_C_SRCS} ${JSON_C_HEADERS})
-target_include_directories(${PROJECT_NAME} PUBLIC . )
+target_include_directories(json-c PUBLIC . )
diff --git a/3rdparty/monero_crypto/CMakeLists.txt b/3rdparty/monero_crypto/CMakeLists.txt
index 8b18872212178b42ad5fa354d383e561caec5f15..34af01cb61fa4499f5fa863e4e87d835447432f7 100755
--- a/3rdparty/monero_crypto/CMakeLists.txt
+++ b/3rdparty/monero_crypto/CMakeLists.txt
@@ -384,7 +384,7 @@ endif()
 
 
 add_library(${PROJECT_NAME} STATIC ${monero_crypto_sources})
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_include_directories(monero_crypto INTERFACE .)
 
 
 set(${PROJECT_NAME}_DEFINITIONS CACHE INTERNAL "${PROJECT_NAME}: Definitions" FORCE)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3b9646c0a6ceb784cb81de544a6a392f8deb6f7d..8e7b2e50f20327ddeb2297296f39b24b3181f1a9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,22 +8,6 @@ add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
 #set(BUILD_CRYPTO_TESTS ON)
 
 set(DAPSDK_MODULES "")
-
-if(NOT DEFINED ${CELLFRAME_MODULES})
-    include (cmake/OS_Detection.cmake)
-    if (WIN32)
-        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange")
-    elseif(BSD)
-        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange")
-    elseif(DARWIN)
-        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange")
-    elseif(ANDROID)
-        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange")
-    elseif(LINUX)
-        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange modules-dynamic srv-vpn")
-    endif()
-endif()
-
 message("Cellframe modules: ${CELLFRAME_MODULES}")
 
 if (CELLFRAME_MODULES MATCHES "modules-dynamic")
diff --git a/dap-sdk/CMakeLists.txt b/dap-sdk/CMakeLists.txt
index f1b30e0ed0b169065f03f9b01d38c9ae34a4d3c9..9a6f3fa6394bd90cbc3d3d93c2aae300b843a209 100644
--- a/dap-sdk/CMakeLists.txt
+++ b/dap-sdk/CMakeLists.txt
@@ -1,4 +1,4 @@
-set(DAP_SDK_NATIVE_VERSION "2.3-0")
+set(DAP_SDK_NATIVE_VERSION "2.2-2")
 
 # We switch off SSL until its not switched on back
 if(DAPSDK_MODULES MATCHES "ssl-support")
diff --git a/dap-sdk/core/include/dap_math_ops.h b/dap-sdk/core/include/dap_math_ops.h
index f3f3061f34d5d22a47d5b5595c63fa02f89265b1..fb2a1708b7112125d9e5614d235a636459257b36 100755
--- a/dap-sdk/core/include/dap_math_ops.h
+++ b/dap-sdk/core/include/dap_math_ops.h
@@ -1,5 +1,4 @@
 #pragma once
-
 #include <stdint.h>
 #include <stdio.h>
 #include "assert.h"
@@ -14,22 +13,18 @@
 #if __SIZEOF_INT128__ == 16
 
 #define DAP_GLOBAL_IS_INT128
-
-#endif
-
-
-#ifdef DAP_GLOBAL_IS_INT128
 typedef __int128 _dap_int128_t;
 
-//#if !defined (int128_t)
+#if !defined (int128_t)
 typedef __int128 int128_t;
-//#endif
+#endif
 
-//#if !defined (uint128_t)
+#if !defined (uint128_t)
 typedef unsigned __int128 uint128_t;
-//#endif
+#endif
+
 
-#else //DAP_GLOBAL_IS_INT128
+#else // __SIZEOF_INT128__ == 16
 
 typedef union uint128 {
     struct{
@@ -45,19 +40,25 @@ typedef union int128 {
     int32_t i32[4];
 } int128_t;
 
-#endif //DAP_GLOBAL_IS_INT128
-
 typedef int128_t _dap_int128_t;
 
-typedef struct uint256 {
+#endif // __SIZEOF_INT128__ == 16
+
+typedef struct uint256_t {
     uint128_t hi;
     uint128_t lo;
-} uint256_t;
 
-typedef struct uint512 {
+    } uint256_t;
+
+typedef struct uint512_t {
     uint256_t hi;
     uint256_t lo;
-} uint512_t;
+
+    } uint512_t;
+
+
+
+
 
 #endif //defined(__GNUC__) || defined (__clang__)
 
@@ -65,56 +66,18 @@ typedef struct uint512 {
 
 #ifndef DAP_GLOBAL_IS_INT128
 
-// uint128_t dap_uint128_substract(uint128_t a, uint128_t b);
-// uint128_t dap_uint128_add(uint128_t a, uint128_t b);
-// bool dap_uint128_check_equal(uint128_t a, uint128_t b);
 const  uint128_t two_power_64={ .hi = 1, .lo = 0};
 const  uint128_t lo_64={ .hi = 0, .lo = 0xffffffffffffffff};
 const  uint128_t hi_64={ .hi = 0xffffffffffffffff, .lo = 0};
-// const  uint128_t zero_128={.hi=0,.lo=0};
-// #define zero_128 ((uint128_t){.hi=0,.lo=0})
-
-#define uint128_0 ((uint128_t){.hi=0,.lo=0})
-#define uint128_1 ((uint128_t){.hi=0,.lo=1})
-
-// const uint64_t lo_32=0xffffffff;
-// const uint64_t hi_32=0xffffffff00000000;
-// const uint64_t ones_64=0xffffffffffffffff;
-
-#else // DAP_GLOBAL_IS_INT128
-
-// #define zero_128 ((uint128_t)0)
-#define uint128_0 ((uint128_t)0)
-#define uint128_1 ((uint128_t)1)
+const  uint128_t zero_128={.hi=0,.lo=0};
 
-#endif // DAP_GLOBAL_IS_INT128
+const  uint256_t zero_256={.hi=zero_128,.lo=zero_128};
 
-// const uint256_t zero_256={.hi=zero_128,.lo=zero_128};
-// #define zero_256 ((uint256_t){.hi=zero_128,.lo=zero_128})
-#define uint256_0 ((uint256_t){.hi=uint128_0,.lo=uint128_0})
-#define uint256_1 ((uint256_t){.hi=uint128_0,.lo=uint128_1})
-#define uint512_0 ((uint512_t){.hi=uint256_0,.lo=uint256_0})
-#define lo_32 ((uint64_t)0xffffffff)
-#define hi_32 ((uint64_t)0xffffffff00000000)
-#define ones_64 ((uint64_t)0xffffffffffffffff)
+const uint64_t lo_32=0xffffffff;
+const uint64_t hi_32=0xffffffff00000000;
+const uint64_t ones_64=0xffffffffffffffff;
 
-
-static inline uint128_t GET_128_FROM_64(uint64_t n) {
-#ifdef DAP_GLOBAL_IS_INT128
-    return (uint128_t) n;
-#else
-    return (uint128_t){.hi=0,.lo=n};
 #endif
-}
-
-static inline uint256_t GET_256_FROM_64(uint64_t n) {
-    return (uint256_t){.hi=uint128_0,.lo=GET_128_FROM_64(n)};
-}
-
-static inline uint256_t GET_256_FROM_128(uint128_t n) {
-    return (uint256_t){.hi=uint128_0,.lo=n};
-}
-
 
 static inline bool EQUAL_128(uint128_t a_128_bit, uint128_t b_128_bit){
 #ifdef DAP_GLOBAL_IS_INT128
@@ -123,12 +86,7 @@ static inline bool EQUAL_128(uint128_t a_128_bit, uint128_t b_128_bit){
     return a_128_bit.lo==b_128_bit.lo && a_128_bit.hi==b_128_bit.hi;
 #endif
 }
-
-
-static inline bool IS_ZERO_128(uint128_t a_128_bit){
-    return EQUAL_128(a_128_bit, uint128_0);
-}
-
+    
 static inline bool EQUAL_256(uint256_t a_256_bit, uint256_t b_256_bit){
 
 #ifdef DAP_GLOBAL_IS_INT128
@@ -142,21 +100,17 @@ static inline bool EQUAL_256(uint256_t a_256_bit, uint256_t b_256_bit){
 #endif
 }
 
-static inline bool IS_ZERO_256(uint256_t a_256_bit){
-
-    return a_256_bit.lo == (uint128_t)0;
-}
-
-
 static inline uint128_t AND_128(uint128_t a_128_bit,uint128_t b_128_bit){
 
 #ifdef DAP_GLOBAL_IS_INT128
     return a_128_bit&b_128_bit;
+    
 #else    
-    uint128_t output=uint128_0;
+    uint128_t output={ .hi = 0, .lo = 0};
     output.hi= a_128_bit.hi & b_128_bit.hi;  
     output.lo= a_128_bit.lo & b_128_bit.lo;
     return output;
+
 #endif
 }
 
@@ -165,46 +119,69 @@ static inline uint128_t OR_128(uint128_t a_128_bit,uint128_t b_128_bit){
 #ifdef DAP_GLOBAL_IS_INT128
     return a_128_bit|b_128_bit;
 
-#else
-    uint128_t output=uint128_0;
+#else    
+    uint128_t output={ .hi = 0, .lo = 0};
     output.hi= a_128_bit.hi | b_128_bit.hi;  
     output.lo= a_128_bit.lo | b_128_bit.lo;
     return output;
+
 #endif
 }
 
 static inline uint256_t AND_256(uint256_t a_256_bit,uint256_t b_256_bit){
-    uint256_t output = uint256_0;
-    output.hi = AND_128(a_256_bit.hi, b_256_bit.hi);  
-    output.lo = AND_128(a_256_bit.lo, b_256_bit.lo);
+
+#ifdef DAP_GLOBAL_IS_INT128
+    uint256_t output = {};
+    output.hi= a_256_bit.hi | b_256_bit.hi;  
+    output.lo= a_256_bit.lo | b_256_bit.lo;
     return output;
+
+#else 
+    uint256_t output={ .hi = zero_128, .lo = zero_128};
+    output.hi= AND_128(a_256_bit.hi, b_256_bit.hi);  
+    output.lo= AND_128(a_256_bit.lo, b_256_bit.lo);
+    return output;
+
+#endif
 }
 
 static inline uint256_t OR_256(uint256_t a_256_bit,uint256_t b_256_bit){
-    uint256_t output = uint256_0;
-    output.hi = OR_128(a_256_bit.hi, b_256_bit.hi); 
-    output.lo = OR_128(a_256_bit.lo, b_256_bit.lo); 
+
+#ifdef DAP_GLOBAL_IS_INT128
+    uint256_t output= {};
+    output.hi= a_256_bit.hi | b_256_bit.hi;  
+    output.lo= a_256_bit.lo | b_256_bit.lo;
     return output;
+
+#else 
+    uint256_t output={ .hi = zero_128, .lo = zero_128};
+    output.hi= OR_128(a_256_bit.hi, b_256_bit.hi); 
+    output.lo= OR_128(a_256_bit.lo, b_256_bit.lo); 
+    return output;
+
+#endif
 }
 
 static inline void LEFT_SHIFT_128(uint128_t a_128_bit,uint128_t* b_128_bit,int n){
     assert (n <= 128);
 
 #ifdef DAP_GLOBAL_IS_INT128
-    *b_128_bit= a_128_bit << n;
+    *b_128_bit=a_128_bit<<n;
 
 #else 
-    if (n >= 64) { // shifting 64-bit integer by more than 63 bits is not defined   
+    if (n >= 64) // shifting 64-bit integer by more than 63 bits is not defined
+    {   
         a_128_bit.hi=a_128_bit.lo;
         a_128_bit.lo=0;
         LEFT_SHIFT_128(a_128_bit,b_128_bit,n-64);
     }
-    if (n == 0) {
+    if (n == 0)
+    {
        b_128_bit->hi=a_128_bit.hi;
        b_128_bit->lo=a_128_bit.lo;
     } 
-    else {
-        uint64_t shift_temp;
+    else
+    {   uint64_t shift_temp;
         shift_temp=a_128_bit.lo<<n;
         b_128_bit->lo=shift_temp;
         b_128_bit->hi=(a_128_bit.hi<<n)|(a_128_bit.lo>>(64-n));
@@ -218,7 +195,9 @@ static inline void RIGHT_SHIFT_128(uint128_t a_128_bit,uint128_t* b_128_bit,int
 
 #ifdef DAP_GLOBAL_IS_INT128
     (*b_128_bit) = a_128_bit >> n;
+
 #else 
+    
     if (n >= 64) // shifting 64-bit integer by more than 63 bits is not defined
     {   
         a_128_bit.lo=a_128_bit.hi;
@@ -244,48 +223,97 @@ static inline void LEFT_SHIFT_256(uint256_t a_256_bit,uint256_t* b_256_bit,int n
  
     assert (n <= 256);
 
-    if (n >= 128) { // shifting 64-bit integer by more than 63 bits is not defined 
+#ifdef DAP_GLOBAL_IS_INT128
+
+    if (n >= 128) 
+    {   
+        a_256_bit.hi=a_256_bit.lo;
+        a_256_bit.lo=0;
+        LEFT_SHIFT_256(a_256_bit,b_256_bit,n-128);
+    }
+    if (n == 0)
+    {
+       b_256_bit->hi=a_256_bit.hi;
+       b_256_bit->lo=a_256_bit.lo;
+    } 
+    else
+    {   uint128_t shift_temp;
+        shift_temp=a_256_bit.lo<<n;
+        b_256_bit->lo=shift_temp;
+        b_256_bit->hi=(a_256_bit.hi<<n)|(a_256_bit.lo>>(128-n));
+    }
+
+#else 
+    if (n >= 128) // shifting 64-bit integer by more than 63 bits is not defined
+    {   
         a_256_bit.hi=a_256_bit.lo;
-        a_256_bit.lo=uint128_0;
+        a_256_bit.lo=zero_128;
         LEFT_SHIFT_256(a_256_bit,b_256_bit,n-128);
     }
-    if (n == 0) {
+    if (n == 0)
+    {
        b_256_bit->hi=a_256_bit.hi;
        b_256_bit->lo=a_256_bit.lo;
     } 
-    if (n<128) {
-        uint128_t shift_temp=uint128_0;
+    if (n<128)
+    {   uint128_t shift_temp{.hi=0, .lo=0};
         LEFT_SHIFT_128(a_256_bit.lo,&shift_temp,n);
         b_256_bit->lo=shift_temp;   
-        uint128_t shift_temp_or_left=uint128_0;
-        uint128_t shift_temp_or_right=uint128_0;
+        uint128_t shift_temp_or_left{.hi=0, .lo=0};
+        uint128_t shift_temp_or_right{.hi=0, .lo=0};
         LEFT_SHIFT_128(a_256_bit.hi,&shift_temp_or_left,n);
         RIGHT_SHIFT_128(a_256_bit.lo,&shift_temp_or_right,128-n);
         b_256_bit->hi=OR_128(shift_temp_or_left,shift_temp_or_right);
     }
+#endif
 }
 
 static inline void RIGHT_SHIFT_256(uint256_t a_256_bit,uint256_t* b_256_bit,int n){
     assert (n <= 256);
-    if (n >= 128) { // shifting 64-bit integer by more than 63 bits is not defined   
+
+#ifdef DAP_GLOBAL_IS_INT128
+
+    if (n >= 128) 
+    {   
+        a_256_bit.lo=a_256_bit.hi;
+        a_256_bit.hi=0;
+        RIGHT_SHIFT_256(a_256_bit,b_256_bit,n-128);
+    }
+    if (n == 0)
+    {
+       b_256_bit->hi=a_256_bit.hi;
+       b_256_bit->lo=a_256_bit.lo;
+    } 
+    else
+    {   uint64_t shift_temp;
+        shift_temp=a_256_bit.hi>>n;
+        b_256_bit->hi=shift_temp;
+        b_256_bit->lo=(a_256_bit.lo>>n)|(a_256_bit.hi<<(128-n));
+    }
+
+#else 
+    if (n >= 128) // shifting 64-bit integer by more than 63 bits is not defined
+    {   
         a_256_bit.lo=a_256_bit.hi;
-        a_256_bit.hi=uint128_0;
+        a_256_bit.hi=zero_128;
         RIGHT_SHIFT_256(a_256_bit,b_256_bit,n-128);
     }
-    if (n == 0) {
+    if (n == 0)
+    {
        b_256_bit->hi=a_256_bit.hi;
        b_256_bit->lo=a_256_bit.lo;
     } 
-    if (n<128) {
-        uint128_t shift_temp=uint128_0;
+    if (n<128)
+    {   uint128_t shift_temp{.hi=0, .lo=0};
         RIGHT_SHIFT_128(a_256_bit.hi,&shift_temp,n);
         b_256_bit->hi=shift_temp;   
-        uint128_t shift_temp_or_left=uint128_0;
-        uint128_t shift_temp_or_right=uint128_0;
+        uint128_t shift_temp_or_left{.hi=0, .lo=0};
+        uint128_t shift_temp_or_right{.hi=0, .lo=0};
         RIGHT_SHIFT_128(a_256_bit.lo,&shift_temp_or_left,n);
         LEFT_SHIFT_128(a_256_bit.hi,&shift_temp_or_right,128-n);
         b_256_bit->lo=OR_128(shift_temp_or_left,shift_temp_or_right);
     }
+#endif
 }
 
 static inline void INCR_128(uint128_t *a_128_bit){
@@ -302,20 +330,20 @@ static inline void INCR_128(uint128_t *a_128_bit){
 #endif
 }
 
-static inline void DECR_128(uint128_t* a_128_bit){
-
-#ifdef DAP_GLOBAL_IS_INT128
-   (*a_128_bit)--;
-
-#else 
-   a_128_bit->lo--;
-   if(a_128_bit->hi == 0)
-   {
-       a_128_bit->hi--;
-   }  
-#endif
-}
-
+//static inline void DECR_128(uint128_t* a_128_bit){
+//
+//#ifdef DAP_GLOBAL_IS_INT128
+//    *a_128_bit--;
+//
+//#else 
+//    a_128_bit->lo--;
+//    if(a_128_bit->hi == 0)
+//    {
+//        a_128_bit->hi--;
+//    }  
+//#endif
+//}
+//
 static inline void INCR_256(uint256_t* a_256_bit){
 
 #ifdef DAP_GLOBAL_IS_INT128
@@ -327,39 +355,36 @@ static inline void INCR_256(uint256_t* a_256_bit){
 
 #else 
     INCR_128(&a_256_bit->lo);
-    if(EQUAL_128(a_256_bit->lo, uint128_0))
+    if(EQUAL_128(a_256_bit->lo, zero_128))
     {
         INCR_128(&a_256_bit->hi);
     }  
 #endif
 }
 
-static inline int SUM_64_64(uint64_t a_64_bit,uint64_t b_64_bit,uint64_t* c_64_bit )
-{
-    int overflow_flag;
-    *c_64_bit=a_64_bit+b_64_bit;
-    overflow_flag=(*c_64_bit<a_64_bit);
-    return overflow_flag;
-}
+static inline int SUM_64_64(uint64_t a_64_bit,uint64_t b_64_bit,uint64_t* c_64_bit ) {
 
-static inline int OVERFLOW_SUM_64_64(uint64_t a_64_bit,uint64_t b_64_bit)
-{
-    int overflow_flag;
-    overflow_flag=(a_64_bit+b_64_bit<a_64_bit);
-    return overflow_flag;
-}
+int overflow_flag;
+*c_64_bit=a_64_bit+b_64_bit;
+overflow_flag=(*c_64_bit<a_64_bit);
+return overflow_flag;}
 
-static inline int OVERFLOW_MULT_64_64(uint64_t a_64_bit,uint64_t b_64_bit)
-{ 
-    return (a_64_bit>((uint64_t)-1)/b_64_bit);
-}
+
+
+static inline int OVERFLOW_SUM_64_64(uint64_t a_64_bit,uint64_t b_64_bit) {
+
+int overflow_flag;
+overflow_flag=(a_64_bit+b_64_bit<a_64_bit);
+return overflow_flag;}
+
+static inline int OVERFLOW_MULT_64_64(uint64_t a_64_bit,uint64_t b_64_bit) { return (a_64_bit>((uint64_t)-1)/b_64_bit); }
 
 static inline int MULT_64_64(uint64_t a_64_bit,uint64_t b_64_bit,uint64_t* c_64_bit ) {
-    int overflow_flag;
-    *c_64_bit=a_64_bit*b_64_bit;
-    overflow_flag=OVERFLOW_MULT_64_64(a_64_bit, b_64_bit);
-    return overflow_flag;
-}
+
+int overflow_flag;
+*c_64_bit=a_64_bit*b_64_bit;
+overflow_flag=OVERFLOW_MULT_64_64(a_64_bit, b_64_bit);
+return overflow_flag;}
 
 //
 //static inline void SUM_64_128(uint64_t a_64_bit,uint64_t b_64_bit,uint128_t* c_128_bit ) {
@@ -367,16 +392,10 @@ static inline int MULT_64_64(uint64_t a_64_bit,uint64_t b_64_bit,uint64_t* c_64_
 //c_128_bit->lo=a_64_bit+b_64_bit;
 //c_128_bit->hi=(c_128_bit->lo<a_64_bit);}
 
-
+#ifndef DAP_GLOBAL_IS_INT128
 //Mixed precision: add a uint64_t into a uint128_t
-static inline int ADD_64_INTO_128(uint64_t a_64_bit,uint128_t *c_128_bit )
-{
+static inline int ADD_64_INTO_128(uint64_t a_64_bit,uint128_t* c_128_bit ) {
     int overflow_flag=0;
-#ifdef DAP_GLOBAL_IS_INT128
-    uint128_t temp=*c_128_bit;
-    *c_128_bit+=(uint128_t)a_64_bit;
-    overflow_flag=(*c_128_bit<temp);
-#else
     uint64_t overflow_64=0;
     uint64_t temp=0;
     temp=c_128_bit->lo;
@@ -384,19 +403,10 @@ static inline int ADD_64_INTO_128(uint64_t a_64_bit,uint128_t *c_128_bit )
     overflow_64=overflow_flag;
     temp=c_128_bit->hi;
     overflow_flag=SUM_64_64(overflow_64,temp,&c_128_bit->hi);
-#endif
-    return overflow_flag;
-}
+    return overflow_flag;}
 
-
-static inline int SUM_128_128(uint128_t a_128_bit,uint128_t b_128_bit,uint128_t* c_128_bit)
-{
-    int overflow_flag=0;
-#ifdef DAP_GLOBAL_IS_INT128
-    *c_128_bit=a_128_bit+b_128_bit;
-    overflow_flag=(*c_128_bit<a_128_bit);
-    return overflow_flag;
-#else
+static inline int  SUM_128_128(uint128_t a_128_bit,uint128_t b_128_bit,uint128_t* c_128_bit){
+    int overflow_flag;
     int overflow_flag_intermediate;
     overflow_flag=SUM_64_64(a_128_bit.lo,b_128_bit.lo,&c_128_bit->lo);
     uint64_t carry_in_64=overflow_flag;
@@ -405,59 +415,46 @@ static inline int SUM_128_128(uint128_t a_128_bit,uint128_t b_128_bit,uint128_t*
     overflow_flag=SUM_64_64(carry_in_64,a_128_bit.hi,&intermediate_value);
     overflow_flag_intermediate=SUM_64_64(intermediate_value,b_128_bit.hi,&c_128_bit->hi);
     int return_overflow=overflow_flag|overflow_flag_intermediate;
-    return return_overflow;
-#endif
-}
+    return return_overflow;}
 
-static inline int SUBTRACT_128_128(uint128_t a_128_bit, uint128_t b_128_bit, uint128_t* c_128_bit)
+static inline int SUBTRACT_128_128(uint128_t a_128_bit, uint128_t b_128_bit,uint128_t* c_128_bit)
 {
-    int underflow_flag = 0;
-#ifdef DAP_GLOBAL_IS_INT128
-    *c_128_bit = a_128_bit - b_128_bit;
-    underflow_flag = (*c_128_bit < 0) ^ (a_128_bit < b_128_bit);
-#else
     c_128_bit->lo = a_128_bit.lo - b_128_bit.lo;
     uint64_t carry = (((c_128_bit->lo & b_128_bit.lo) & 1) + (b_128_bit.lo >> 1) + (c_128_bit->lo >> 1)) >> 63;
     c_128_bit->hi = a_128_bit.hi - (b_128_bit.hi + carry);
-    underflow_flag=carry;
-#endif
+    int underflow_flag=carry;
     return underflow_flag;
 }
 
-
+//static inline int SUBTRACT_256_256(uint256_t a_256_bit, uint256_t b_256_bit,uint256_t* c_256_bit){
+//
+//    if 
+//  int carry=0;
+//    carry=SUBTRACT_128_128(a_256_bit.lo, b_256_bit.lo,&c_256_bit->lo);
+//    uint64_t carry_64=carry;
+//    uint128_t carry_128{.hi=0,.lo=carry_64};
+//    uint128_t intermediate_val{.hi=0,.lo=0};
+//    int dummy_overflow=0;
+//    dummy_overflow=SUM_128_128(b_256_bit.hi,carry_128,&intermediate_val);
+//    carry=SUBTRACT_128_128(a_256_bit.hi, intermediate_val,&c_256_bit->hi );
+//    return carry;
+//}
 //
 //Mixed precision: add a uint128_t into a uint256_t
 static inline int ADD_128_INTO_256(uint128_t a_128_bit,uint256_t* c_256_bit) {
     int overflow_flag=0;
-    uint128_t overflow_128 = uint128_0;
-    uint128_t temp = uint128_0;
+    uint128_t overflow_128={.hi=0,.lo=0};
+    uint128_t temp={.hi=0,.lo=0};
     temp=c_256_bit->lo;
     overflow_flag=SUM_128_128(a_128_bit,temp,&c_256_bit->lo);
-
-#ifdef DAP_GLOBAL_IS_INT128
-    overflow_128=overflow_flag;
-#else
     overflow_128.lo=overflow_flag;
-#endif
-
     temp=c_256_bit->hi;
     overflow_flag=SUM_128_128(overflow_128,temp,&c_256_bit->hi);
-    return overflow_flag;
-}
+    return overflow_flag;}
 
-static inline int SUM_256_256(uint256_t a_256_bit,uint256_t b_256_bit,uint256_t* c_256_bit)
-{
-    int overflow_flag=0;
-#ifdef DAP_GLOBAL_IS_INT128
-    int overflow_flag_intermediate;
-    overflow_flag=SUM_128_128(a_256_bit.lo,b_256_bit.lo,&c_256_bit->lo);
-    uint128_t carry_in_128=overflow_flag;
-    uint128_t intermediate_value=0;
-    overflow_flag=0;
-    overflow_flag=SUM_128_128(carry_in_128,a_256_bit.hi,&intermediate_value);
-    overflow_flag_intermediate=SUM_128_128(intermediate_value,b_256_bit.hi,&c_256_bit->hi);
-    overflow_flag=overflow_flag||overflow_flag_intermediate;
-#else
+
+static inline int  SUM_256_256(uint256_t a_256_bit,uint256_t b_256_bit,uint256_t* c_256_bit){
+    int overflow_flag;
     overflow_flag=SUM_128_128(a_256_bit.lo,b_256_bit.lo,&c_256_bit->lo);
     uint128_t carry_in_128;
     carry_in_128.hi=0;
@@ -467,25 +464,17 @@ static inline int SUM_256_256(uint256_t a_256_bit,uint256_t b_256_bit,uint256_t*
     intermediate_value.lo=0;
     overflow_flag=0;
     overflow_flag=SUM_128_128(carry_in_128,a_256_bit.hi,&intermediate_value);
+    
     //we store overflow_flag in case there is already overflow
     int overflow_flag_bis=0; 
+    
     overflow_flag_bis=SUM_128_128(intermediate_value,b_256_bit.hi,&c_256_bit->hi);
     overflow_flag=overflow_flag||overflow_flag_bis;
-#endif
-    return overflow_flag;
-}
+    return overflow_flag;}
 
-static inline int SUBTRACT_256_256(uint256_t a_256_bit,uint256_t b_256_bit,uint256_t* c_256_bit)
-{
-#ifdef DAP_GLOBAL_IS_INT128
-    int underflow_flag=0;
-    c_256_bit->lo = a_256_bit.lo - b_256_bit.lo;
-    uint64_t carry = (((c_256_bit->lo & b_256_bit.lo) & 1) + (b_256_bit.lo >> 1) + (c_256_bit->lo >> 1)) >> 127;
-    c_256_bit->hi = a_256_bit.hi - (b_256_bit.hi + carry);
-    underflow_flag=carry;
-    return underflow_flag;
-
-#else
+static inline int  SUBTRACT_256_256(uint256_t a_256_bit,uint256_t b_256_bit,uint256_t* c_256_bit){
+    
+//(u64 rd[4], const u64 ad[4], const u64 bd[4])
     uint64_t t, r, borrow;
 
     t = a_256_bit.lo.lo;
@@ -515,33 +504,24 @@ static inline int SUBTRACT_256_256(uint256_t a_256_bit,uint256_t b_256_bit,uint2
     c_256_bit->hi.hi = r;
 
     return borrow;
-#endif
-}
+
+    }
 
 //Mixed precision: add a uint256_t into a uint512_t
 static inline int ADD_256_INTO_512(uint256_t a_256_bit,uint512_t* c_512_bit) {
     int overflow_flag=0;
-    uint256_t overflow_256=uint256_0;
-    uint256_t temp=uint256_0;
+    uint256_t overflow_256={.hi=zero_128,.lo=zero_128};
+    uint256_t temp={.hi=zero_128,.lo=zero_128};
     temp=c_512_bit->lo;
     overflow_flag=SUM_256_256(a_256_bit,temp,&c_512_bit->lo);
-#ifdef DAP_GLOBAL_IS_INT128
-    overflow_256.lo=overflow_flag;
-#else
     overflow_256.lo.lo=overflow_flag;
-#endif
     temp=c_512_bit->hi;
     overflow_flag=SUM_256_256(overflow_256,temp,&c_512_bit->hi);
-    return overflow_flag;
-}
+    return overflow_flag;}
 
 
 static inline void MULT_64_128(uint64_t a_64_bit, uint64_t b_64_bit, uint128_t* c_128_bit)
 {
-#ifdef DAP_GLOBAL_IS_INT128
-    *c_128_bit = (uint128_t)a_64_bit;
-    *c_128_bit *= (uint128_t)b_64_bit;
-#else
     uint64_t a_64_bit_hi = (a_64_bit & 0xffffffff);
     uint64_t b_64_bit_hi = (b_64_bit & 0xffffffff);
     uint64_t prod_hi = (a_64_bit_hi * b_64_bit_hi);
@@ -559,39 +539,20 @@ static inline void MULT_64_128(uint64_t a_64_bit, uint64_t b_64_bit, uint128_t*
 
     c_128_bit->hi = (a_64_bit * b_64_bit) + w1 + prod_hi_shift_right;
     c_128_bit->lo = (prod_hi << 32) + w3;
-#endif
 }
 
 
 
 static inline void MULT_128_256(uint128_t a_128_bit,uint128_t b_128_bit,uint256_t* c_256_bit ) {
-#ifdef DAP_GLOBAL_IS_INT128
-    uint128_t a_128_bit_hi = (a_128_bit & 0xffffffffffffffff);
-    uint128_t b_128_bit_hi = (b_128_bit & 0xffffffffffffffff);
-    uint128_t prod_hi = (a_128_bit_hi * b_128_bit_hi);
-    uint128_t w3 = (prod_hi & 0xffffffffffffffff);
-    uint128_t prod_hi_shift_right = (prod_hi >> 64);
-
-    a_128_bit >>= 64;
-    prod_hi = (a_128_bit * b_128_bit_hi) + prod_hi_shift_right;
-    prod_hi_shift_right = (prod_hi & 0xffffffffffffffff);
-    uint64_t w1 = (prod_hi >> 64);
-
-    b_128_bit >>= 64;
-    prod_hi = (a_128_bit_hi * b_128_bit) + prod_hi_shift_right;
-    prod_hi_shift_right = (prod_hi >> 64);
-
-    c_256_bit->hi = (a_128_bit * b_128_bit) + w1 + prod_hi_shift_right;
-    c_256_bit->lo = (prod_hi << 64) + w3;
-#else
+
     //product of .hi terms - stored in .hi field of c_256_bit
     MULT_64_128(a_128_bit.hi,b_128_bit.hi, &c_256_bit->hi);
 
     //product of .lo terms - stored in .lo field of c_256_bit        
     MULT_64_128(a_128_bit.lo,b_128_bit.lo, &c_256_bit->lo);
 
-    uint128_t cross_product_one={.hi=0, .lo=0};
-    uint128_t cross_product_two={.hi=0, .lo=0};
+    uint128_t cross_product_one{.hi=0, .lo=0};
+    uint128_t cross_product_two{.hi=0, .lo=0};
     MULT_64_128(a_128_bit.hi, b_128_bit.lo, &cross_product_one);
     c_256_bit->lo.hi += cross_product_one.lo;
     if(c_256_bit->lo.hi < cross_product_one.lo)  // if overflow
@@ -615,93 +576,82 @@ static inline void MULT_128_256(uint128_t a_128_bit,uint128_t b_128_bit,uint256_
     {
         c_256_bit->hi.hi+=1;
     }
-#endif
-}
-
-// MULT_128_128_NEW
-static inline int MULT_128_128(uint128_t a_128_bit, uint128_t b_128_bit, uint128_t* c_128_bit){
-    int overflow_flag=0;
+} 
 
-#ifdef DAP_GLOBAL_IS_INT128
-    *c_128_bit=a_128_bit*b_128_bit;
-    overflow_flag=(a_128_bit>((uint128_t)-1)/b_128_bit);
-#else
+static inline int MULT_128_128_NEW(uint128_t a_128_bit,uint128_t b_128_bit,uint128_t* accum_128_bit){
+    int overflow=0; 
     int equal_flag=0;
-    uint256_t full_product_256={.hi=uint128_0, .lo=uint128_0};
+    uint256_t full_product_256{.hi=zero_128, .lo=zero_128};
     MULT_128_256(a_128_bit,b_128_bit,&full_product_256);
-    *c_128_bit=full_product_256.lo;
-    equal_flag=EQUAL_128(full_product_256.hi,uint128_0);
-    if (!equal_flag) {
-        overflow_flag=1;
+    *accum_128_bit=full_product_256.lo;
+    equal_flag=EQUAL_128(full_product_256.hi,zero_128);
+    if (!equal_flag)
+    {
+        overflow=1;
     }
-#endif
-    return overflow_flag;
+    return overflow;
 }
 
+static inline int MULT_128_128(uint128_t a_128_bit,uint128_t b_128_bit,uint128_t* accum_128_bit) {    
+    uint64_t A=(b_128_bit.lo & lo_32)*(a_128_bit.hi & lo_32);
+    uint64_t B_32_64=((b_128_bit.lo & lo_32)*(a_128_bit.hi & hi_32))&hi_32;
+    uint64_t C_32_64=((b_128_bit.lo & hi_32)*(a_128_bit.hi & lo_32))&hi_32;
+    uint64_t E=(a_128_bit.lo & lo_32)*(b_128_bit.hi & lo_32);
+    uint64_t F_32_64=((a_128_bit.lo & lo_32)*(b_128_bit.hi & hi_32))&hi_32;
+    uint64_t G_32_64=((a_128_bit.lo & hi_32)*(b_128_bit.hi & lo_32))&hi_32;
 
-// incorrect
-// static inline int MULT_128_128(uint128_t a_128_bit,uint128_t b_128_bit,uint128_t* accum_128_bit) {    
-//     uint64_t A=(b_128_bit.lo & lo_32)*(a_128_bit.hi & lo_32);
-//     uint64_t B_32_64=((b_128_bit.lo & lo_32)*(a_128_bit.hi & hi_32))&hi_32;
-//     uint64_t C_32_64=((b_128_bit.lo & hi_32)*(a_128_bit.hi & lo_32))&hi_32;
-//     uint64_t E=(a_128_bit.lo & lo_32)*(b_128_bit.hi & lo_32);
-//     uint64_t F_32_64=((a_128_bit.lo & lo_32)*(b_128_bit.hi & hi_32))&hi_32;
-//     uint64_t G_32_64=((a_128_bit.lo & hi_32)*(b_128_bit.hi & lo_32))&hi_32;
+    //initialization of overflow counter
+    int overflow_ctr=0;
 
-//     //initialization of overflow counter
-//     int overflow_ctr=0;
-
-//      //checking of overflow from ".hi terms"
-//     int overflow_from_hi_calc=0;
-//     overflow_from_hi_calc=(a_128_bit.hi*b_128_bit.hi>0);
-//     overflow_ctr+=overflow_from_hi_calc;
+     //checking of overflow from ".hi terms"
+    int overflow_from_hi_calc=0;
+    overflow_from_hi_calc=(a_128_bit.hi*b_128_bit.hi>0);
+    overflow_ctr+=overflow_from_hi_calc;
     
-//     //product of two ".lo" terms
-//     MULT_64_128(a_128_bit.lo,b_128_bit.lo,accum_128_bit);   
+    //product of two ".lo" terms
+    MULT_64_128(a_128_bit.lo,b_128_bit.lo,accum_128_bit);   
 
-//     int overflow=0;
-//     uint64_t temp=0;
+    int overflow=0;
+    uint64_t temp=0;
 
-//     overflow=SUM_64_64(A,temp,&accum_128_bit->hi); 
-//     printf("accum_128_bit->hi after add in of A %" PRIu64 "\n",accum_128_bit->hi);
+    overflow=SUM_64_64(A,temp,&accum_128_bit->hi); 
+    printf("accum_128_bit->hi after add in of A %" PRIu64 "\n",accum_128_bit->hi);
  
-//     overflow_ctr+=overflow;
-//     temp=accum_128_bit->hi; 
-//     overflow=0;
-
-//     overflow=SUM_64_64(B_32_64,temp,&accum_128_bit->hi);  
-//     overflow_ctr+=overflow;
-//     temp=accum_128_bit->hi; 
-//     overflow=0;
-
-//     overflow=SUM_64_64(C_32_64,temp,&accum_128_bit->hi);  
-//     overflow_ctr+=overflow;
-//     temp=accum_128_bit->hi; 
-//     overflow=0;
-
-//     overflow=SUM_64_64(E,temp,&accum_128_bit->hi);  
-//     overflow_ctr+=overflow;
-//     temp=accum_128_bit->hi; 
-//     overflow=0;
-
-//     overflow=SUM_64_64(F_32_64,temp,&accum_128_bit->hi);  
-//     overflow_ctr+=overflow;
-//     temp=accum_128_bit->hi; 
-//     overflow=0;
+    overflow_ctr+=overflow;
+    temp=accum_128_bit->hi; 
+    overflow=0;
+
+    overflow=SUM_64_64(B_32_64,temp,&accum_128_bit->hi);  
+    overflow_ctr+=overflow;
+    temp=accum_128_bit->hi; 
+    overflow=0;
+
+    overflow=SUM_64_64(C_32_64,temp,&accum_128_bit->hi);  
+    overflow_ctr+=overflow;
+    temp=accum_128_bit->hi; 
+    overflow=0;
+
+    overflow=SUM_64_64(E,temp,&accum_128_bit->hi);  
+    overflow_ctr+=overflow;
+    temp=accum_128_bit->hi; 
+    overflow=0;
+
+    overflow=SUM_64_64(F_32_64,temp,&accum_128_bit->hi);  
+    overflow_ctr+=overflow;
+    temp=accum_128_bit->hi; 
+    overflow=0;
         
-//     overflow=SUM_64_64(G_32_64,temp,&accum_128_bit->hi);  
-//     overflow_ctr+=overflow;
-//     temp=accum_128_bit->hi;  
-//     overflow=0;
-
-//     if(overflow_ctr>0){
-//         overflow=1;}
-//     else{overflow=0;}
+    overflow=SUM_64_64(G_32_64,temp,&accum_128_bit->hi);  
+    overflow_ctr+=overflow;
+    temp=accum_128_bit->hi;  
+    overflow=0;
+
+    if(overflow_ctr>0){
+        overflow=1;}
+    else{overflow=0;}
     
-//     return overflow;
-// }
-
-
+    return overflow;
+    }
 
 static inline void MULT_256_512(uint256_t a_256_bit,uint256_t b_256_bit,uint512_t* c_512_bit) {
     int dummy_overflow;
@@ -712,12 +662,12 @@ static inline void MULT_256_512(uint256_t a_256_bit,uint256_t b_256_bit,uint512_
     MULT_128_256(a_256_bit.lo,b_256_bit.lo, &c_512_bit->lo);
 
     //cross product of .hi and .lo terms
-    uint256_t cross_product_first_term=uint256_0;
-    uint256_t cross_product_second_term=uint256_0;
-    uint256_t cross_product=uint256_0;
-    uint256_t cross_product_shift_128=uint256_0;
-    uint256_t c_512_bit_lo_copy=uint256_0;
-    uint256_t c_512_bit_hi_copy=uint256_0;
+    uint256_t cross_product_first_term{ .hi = zero_128, .lo = zero_128};
+    uint256_t cross_product_second_term{ .hi = zero_128, .lo = zero_128};
+    uint256_t cross_product{ .hi = zero_128, .lo = zero_128};
+    uint256_t cross_product_shift_128{ .hi = zero_128, .lo = zero_128};
+    uint256_t c_512_bit_lo_copy{ .hi = zero_128, .lo = zero_128};
+    uint256_t c_512_bit_hi_copy{ .hi = zero_128, .lo = zero_128};
     int overflow=0;
 
     MULT_128_256(a_256_bit.hi,b_256_bit.lo,&cross_product_first_term);
@@ -729,75 +679,66 @@ static inline void MULT_256_512(uint256_t a_256_bit,uint256_t b_256_bit,uint512_
     c_512_bit_lo_copy=c_512_bit->lo; 
     dummy_overflow=SUM_256_256(c_512_bit_lo_copy,cross_product_shift_128,&c_512_bit->lo);    
  
-    cross_product_shift_128.hi = uint128_0; 
-    cross_product_shift_128.lo = uint128_0;
+    cross_product_shift_128.hi = zero_128; 
+    cross_product_shift_128.lo = zero_128;
     RIGHT_SHIFT_256(cross_product,&cross_product_shift_128,128);
     c_512_bit_hi_copy=c_512_bit->hi;    
     dummy_overflow=SUM_256_256(c_512_bit_hi_copy,cross_product_shift_128,&c_512_bit->hi);
-}
-
-static inline int MULT_256_256(uint256_t a_256_bit,uint256_t b_256_bit,uint256_t* accum_256_bit){
-    int overflow=0; 
-    int equal_flag=0;
-    uint512_t full_product_512={.hi=uint256_0,.lo=uint256_0,};
-    MULT_256_512(a_256_bit,b_256_bit,&full_product_512);
-    *accum_256_bit=full_product_512.lo;
-    equal_flag=EQUAL_256(full_product_512.hi,uint256_0);
-    if (!equal_flag)
-    {
-        overflow=1;
     }
-    return overflow;
-}
 
-// incorrect
-// static inline int MULT_256_256_NEW(uint256_t a_256_bit,uint256_t b_256_bit,uint256_t* accum_256_bit){
 
-//     uint128_t two_0_coeff={.hi=0,.lo=0};
-//     MULT_64_128(a_256_bit.lo.lo,b_256_bit.lo.lo,&two_0_coeff);
-//     accum_256_bit->lo.lo=two_0_coeff.lo;
+static inline int MULT_256_256_NEW(uint256_t a_256_bit,uint256_t b_256_bit,uint256_t* accum_256_bit){
+
+    uint128_t two_0_coeff{.hi=0,.lo=0};
+    MULT_64_128(a_256_bit.lo.lo,b_256_bit.lo.lo,&two_0_coeff);
+    accum_256_bit->lo.lo=two_0_coeff.lo;
     
-//     uint128_t two_64_coeff={.hi=0,.lo=0};
-//     uint128_t two_64_coeff_one={.hi=0,.lo=0};
-//     MULT_64_128(a_256_bit.lo.hi,b_256_bit.lo.lo,&two_64_coeff_one);
-//     uint128_t two_64_coeff_two={.hi=0,.lo=0};
-//     MULT_64_128(a_256_bit.lo.lo,b_256_bit.lo.hi,&two_64_coeff_two);
-//     uint128_t two_64_coeff_sum={.hi=0,.lo=0};
-//     int dummy_overflow=0;
-//     dummy_overflow=SUM_128_128(two_64_coeff_one,two_64_coeff_two,&two_64_coeff_sum);
-//     if (two_64_coeff_sum.lo+two_0_coeff.hi<two_64_coeff_sum.lo){
+    uint128_t two_64_coeff{.hi=0,.lo=0};
+    uint128_t two_64_coeff_one{.hi=0,.lo=0};
+    MULT_64_128(a_256_bit.lo.hi,b_256_bit.lo.lo,&two_64_coeff_one);
+    uint128_t two_64_coeff_two{.hi=0,.lo=0};
+    MULT_64_128(a_256_bit.lo.lo,b_256_bit.lo.hi,&two_64_coeff_two);
+    uint128_t two_64_coeff_sum{.hi=0,.lo=0};
+    int dummy_overflow=0;
+    dummy_overflow=SUM_128_128(two_64_coeff_one,two_64_coeff_two,&two_64_coeff_sum);
+    if (two_64_coeff_sum.lo+two_0_coeff.hi<two_64_coeff_sum.lo){
         
-//         two_64_coeff.lo=two_64_coeff_sum.lo+two_0_coeff.hi;
-//         two_64_coeff.hi=1+two_64_coeff_sum.hi;}
-//     else{
-//         two_64_coeff.lo=two_64_coeff_sum.lo+two_0_coeff.hi;
-//         two_64_coeff.hi=two_64_coeff_sum.hi;
-//     }
-//     accum_256_bit->lo.hi=two_64_coeff.lo;
+        two_64_coeff.lo=two_64_coeff_sum.lo+two_0_coeff.hi;
+        two_64_coeff.hi=1+two_64_coeff_sum.hi;}
+    else{
+        two_64_coeff.lo=two_64_coeff_sum.lo+two_0_coeff.hi;
+        two_64_coeff.hi=two_64_coeff_sum.hi;
+    }
+    accum_256_bit->lo.hi=two_64_coeff.lo;
     
 
-//     uint128_t two_128_coeff={.hi=0,.lo=0};
-//     uint128_t two_128_coeff_one={.hi=0,.lo=0};
-//     MULT_64_128(a_256_bit.lo.lo,b_256_bit.hi.lo,&two_128_coeff_one);
-//     uint128_t two_128_coeff_two={.hi=0,.lo=0};
-//     MULT_64_128(a_256_bit.hi.lo,b_256_bit.lo.lo,&two_128_coeff_two);
-//     uint128_t two_128_coeff_three={.hi=0,.lo=0};
-//     MULT_64_128(a_256_bit.lo.hi,b_256_bit.lo.hi,&two_128_coeff_three);
-//     uint128_t two_128_coeff_sum_one={.hi=0,.lo=0};
-//     dummy_overflow=SUM_128_128(two_128_coeff_one,two_128_coeff_two,&two_128_coeff_sum_one);
-//     uint128_t two_128_coeff_sum_two={.hi=0,.lo=0};
-//     dummy_overflow=SUM_128_128(two_128_coeff_sum_one,two_128_coeff_three,&two_128_coeff_sum_two);
+    uint128_t two_128_coeff{.hi=0,.lo=0};
+    uint128_t  two_128_coeff_one{.hi=0,.lo=0};
+    MULT_64_128(a_256_bit.lo.lo,b_256_bit.hi.lo,&two_128_coeff_one);
+    uint128_t  two_128_coeff_two{.hi=0,.lo=0};
+    MULT_64_128(a_256_bit.hi.lo,b_256_bit.lo.lo,&two_128_coeff_two);
+    uint128_t two_128_coeff_three{.hi=0,.lo=0};
+    MULT_64_128(a_256_bit.lo.hi,b_256_bit.lo.hi,&two_128_coeff_three);
+    uint128_t two_128_coeff_sum_one{.hi=0,.lo=0};
+    dummy_overflow=SUM_128_128(two_128_coeff_one,two_128_coeff_two,&two_128_coeff_sum_one);
+    uint128_t two_128_coeff_sum_two{.hi=0,.lo=0};
+    dummy_overflow=SUM_128_128(two_128_coeff_sum_one,two_128_coeff_three,&two_128_coeff_sum_two);
     
-//     if (two_128_coeff_sum_two.lo+two_64_coeff.hi<two_128_coeff_sum_two.lo){
+    if (two_128_coeff_sum_two.lo+two_64_coeff.hi<two_128_coeff_sum_two.lo){
         
-//         two_128_coeff.lo=two_128_coeff_sum_two.lo+two_64_coeff.hi;
-//         two_128_coeff.hi=1+two_128_coeff_sum_two.hi;}
-//     else{
-//         two_128_coeff.lo=two_128_coeff_sum_two.lo+two_64_coeff.hi;
-//         two_128_coeff.hi=two_128_coeff_sum_two.hi;
-//     }
-//     accum_256_bit->hi.lo=two_128_coeff.lo;
+        two_128_coeff.lo=two_128_coeff_sum_two.lo+two_64_coeff.hi;
+        two_128_coeff.hi=1+two_128_coeff_sum_two.hi;}
+    else{
+        two_128_coeff.lo=two_128_coeff_sum_two.lo+two_64_coeff.hi;
+        two_128_coeff.hi=two_128_coeff_sum_two.hi;
+    }
+    accum_256_bit->hi.lo=two_128_coeff.lo;
+
 
+
+//    
+//
+//    
 //    uint64_t two_192_coeff=0;
 //    uint64_t two_192_coeff_one=0;
 //    int overflow_two_192_coeff_one=0;
@@ -820,31 +761,33 @@ static inline int MULT_256_256(uint256_t a_256_bit,uint256_t b_256_bit,uint256_t
 //    overflow_two_192_coeff_sum_two=SUM_64_64(two_192_coeff_three,two_192_coeff_four,&two_192_coeff_sum_two);
 //    int overflow_two_192_coeff_sum=0;
 //    overflow_two_192_coeff_sum=SUM_64_64(two_192_coeff_sum_one,two_192_coeff_sum_two,&two_192_coeff);
+    
 
-//     return 0;    
-// }
+    return 0;
+    
+}
 
-//#ifndef DAP_GLOBAL_IS_INT128
-// > ret 1
-// == ret 0
-// < ret -1
-static inline int compare128(uint128_t a, uint128_t b)
-{
-#ifdef DAP_GLOBAL_IS_INT128
-    return ( a > b ? 1 : 0 ) - ( a < b ? 1 : 0 );
-#else
-    return    (((a.hi > b.hi) || ((a.hi == b.hi) && (a.lo > b.lo))) ? 1 : 0) 
-         -    (((a.hi < b.hi) || ((a.hi == b.hi) && (a.lo < b.lo))) ? 1 : 0);
-#endif
+static inline int MULT_256_256(uint256_t a_256_bit,uint256_t b_256_bit,uint256_t* accum_256_bit){
+    int overflow=0; 
+    int equal_flag=0;
+    uint512_t full_product_512{.hi=zero_256,.lo=zero_256,};
+    MULT_256_512(a_256_bit,b_256_bit,&full_product_512);
+    *accum_256_bit=full_product_512.lo;
+    equal_flag=EQUAL_256(full_product_512.hi,zero_256);
+    if (!equal_flag)
+    {
+        overflow=1;
+    }
+    return overflow;
 }
 
-static inline int compare256(uint256_t a, uint256_t b)
+int compare128(uint128_t N1, uint128_t N2)
 {
-    return    (( compare128(a.hi, b.hi) == 1 || (compare128(a.hi, b.hi) == 0 && compare128(a.lo, b.lo) == 1)) ? 1 : 0) 
-         -    (( compare128(a.hi, b.hi) == -1 || (compare128(a.hi, b.hi) == 0 && compare128(a.lo, b.lo) == -1)) ? 1 : 0);
+    return    (((N1.hi > N2.hi) || ((N1.hi == N2.hi) && (N1.lo > N2.lo))) ? 1 : 0) 
+         -    (((N1.hi < N2.hi) || ((N1.hi == N2.hi) && (N1.lo < N2.lo))) ? 1 : 0);
 }
 
-static inline int nlz64(uint64_t N)
+size_t nlz64(uint64_t N)
 {
     uint64_t I;
     size_t C;
@@ -877,135 +820,72 @@ static inline int nlz64(uint64_t N)
     return C;
 }
 
-static inline int nlz128(uint128_t N)
+size_t nlz128(uint128_t N)
 {
-#ifdef DAP_GLOBAL_IS_INT128
-    return ( (N >> 64) == 0) ? nlz64((uint64_t)N) + 64 : nlz64((uint64_t)(N >> 64));
-#else
     return (N.hi == 0) ? nlz64(N.lo) + 64 : nlz64(N.hi);
-#endif
 }
 
-static inline int nlz256(uint256_t N)
+void shiftleft128(uint128_t N, unsigned S, uint128_t* A)
 {
-    return EQUAL_128(N.hi, uint128_0) ? nlz128(N.lo) + 128 : nlz128(N.hi);
-}
-
+    uint64_t M1, M2;
+    S &= 127;
 
-#ifndef DAP_GLOBAL_IS_INT128
-static inline int fls128(uint128_t n) {
-    if ( n.hi != 0 ) {
-        return 127 - nlz64(n.hi);
-    }
-    return 63 - nlz64(n.lo);
+    M1 = ((((S + 127) | S) & 64) >> 6) - 1llu;
+    M2 = (S >> 6) - 1llu;
+    S &= 63;
+    A->hi = (N.lo << S) & (~M2);
+    A->lo = (N.lo << S) & M2;
+    A->hi |= ((N.hi << S) | ((N.lo >> (64 - S)) & M1)) & M2;
 }
 
-static inline void divmod_impl_128(uint128_t a_dividend, uint128_t a_divisor, uint128_t *a_quotient, uint128_t *a_remainder)
+void shiftright128(uint128_t N, unsigned S, uint128_t* A)
 {
-    assert( compare128(a_divisor, uint128_0) ); // a_divisor != 0
-    if ( compare128(a_divisor, a_dividend) == 1 ) { // a_divisor > a_dividend
-        *a_quotient = uint128_0;
-        *a_remainder = a_dividend;
-        return;
-    }
-    if ( compare128(a_divisor, a_dividend) == 0 ) { // a_divisor == a_dividend
-        *a_quotient = uint128_1;
-        *a_remainder = uint128_0;
-        return;
-    }
-
-    uint128_t l_denominator = a_divisor;
-    uint128_t l_quotient = uint128_0;    
-    int l_shift = fls128(a_dividend) - fls128(l_denominator);
-
-    LEFT_SHIFT_128(l_denominator, &l_denominator, l_shift);
-
-    for (int i = 0; i <= l_shift; ++i) {
-        LEFT_SHIFT_128(l_quotient, &l_quotient, 1);
-
-        if( compare128(a_dividend, l_denominator) >= 0 ) {
-            SUBTRACT_128_128(a_dividend, l_denominator, &a_dividend);
-            l_quotient = OR_128(l_quotient, uint128_1);  //l_quotient.lo |= 1;
-        }
-        RIGHT_SHIFT_128(l_denominator, &l_denominator, 1);
-    }
-    *a_quotient = l_quotient;
-    *a_remainder = a_dividend;
-}
-#endif
-
-
-static inline int fls256(uint256_t n) {
-    if ( compare128(n.hi, uint128_0) != 0 ) {
-        return 255 - nlz128(n.hi);
-    }
-    return 127 - nlz128(n.lo);
+    uint64_t M1, M2;
+    S &= 127;
+
+    M1 = ((((S + 127) | S) & 64) >> 6) - 1llu;
+    M2 = (S >> 6) - 1llu;
+    S &= 63;
+    A->lo = (N.hi >> S) & (~M2);
+    A->hi = (N.hi >> S) & M2;
+    A->lo |= ((N.lo >> S) | ((N.hi << (64 - S)) & M1)) & M2;
+} 
+
+void sub128(uint128_t* Ans, uint128_t N, uint128_t M)
+{
+    Ans->lo = N.lo - M.lo;
+    uint64_t C = (((Ans->lo & M.lo) & 1) + (M.lo >> 1) + (Ans->lo >> 1)) >> 63;
+    Ans->hi = N.hi - (M.hi + C);
 }
-
-static inline void divmod_impl_256(uint256_t a_dividend, uint256_t a_divisor, uint256_t *a_quotient, uint256_t *a_remainder)
+void bindivmod128(uint128_t M, uint128_t N, uint128_t* Q, uint128_t* R)
 {
-    assert( compare256(a_divisor, uint256_0) ); // a_divisor != 0
-    if ( compare256(a_divisor, a_dividend) == 1 ) { // a_divisor > a_dividend
-        *a_quotient = uint256_0;
-        *a_remainder = a_dividend;
-        return;
-    }
-    if ( compare256(a_divisor, a_dividend) == 0 ) { // a_divisor == a_dividend
-        *a_quotient = uint256_1;
-        *a_remainder = uint256_0;
-        return;
-    }
-
-    uint256_t l_denominator = a_divisor;
-    uint256_t l_quotient = uint256_0;    
-    // int l_shift = nlz256(a_dividend) - nlz256(l_denominator);
-    int l_shift = fls256(a_dividend) - fls256(l_denominator);
-    LEFT_SHIFT_256(l_denominator, &l_denominator, l_shift);
-
-    for (int i = 0; i <= l_shift; ++i) {
-        LEFT_SHIFT_256(l_quotient, &l_quotient, 1);
+    Q->hi = Q->lo = 0;
+    size_t Shift = nlz128(N) - nlz128(M);
+    shiftleft128(N, Shift, &N);
 
-        if( compare256(a_dividend, l_denominator) >= 0 ) {
-            SUBTRACT_256_256(a_dividend, l_denominator, &a_dividend);
-            l_quotient = OR_256(l_quotient, uint256_1); 
+    do
+    {
+        shiftleft128(*Q, 1, Q);
+        if(compare128(M, N) >= 0)
+        {
+            sub128(&M, N, M);
+            Q->lo |= 1;
         }
-        RIGHT_SHIFT_256(l_denominator, &l_denominator, 1);
-    }
-    *a_quotient = l_quotient;
-    *a_remainder = a_dividend;
-}
 
+        shiftright128(N, 1, &N);
+    }while(Shift-- != 0);
 
-static inline void DIV_128(uint128_t a_128_bit, uint128_t b_128_bit, uint128_t* c_128_bit){
-    uint128_t l_ret = uint128_0;
-#ifdef DAP_GLOBAL_IS_INT128
-    l_ret = a_128_bit / b_128_bit;
-#else
-    uint128_t l_remainder = uint128_0;
-    divmod_impl_128(a_128_bit, b_128_bit, &l_ret, &l_remainder);
-#endif
-    *c_128_bit = l_ret;
+    R->hi = M.hi;
+    R->lo = M.lo;
 }
 
-static inline void DIV_256(uint256_t a_256_bit, uint256_t b_256_bit, uint256_t* c_256_bit){
-    uint256_t l_ret = uint256_0;
-    uint256_t l_remainder = uint256_0;
-    divmod_impl_256(a_256_bit, b_256_bit, &l_ret, &l_remainder);
-    *c_256_bit = l_ret;
-}
-
-
-//
-// dap_uint128_substract, dap_uint128_add, dap_uint128_check_equal - temporarily, for compatibility
+#else
 static inline uint128_t dap_uint128_substract(uint128_t a, uint128_t b)
 {
-    // if (a < b) {
-    //     return 0;
-    // }
-    // return a - b;
-    uint128_t c = uint128_0;
-    SUBTRACT_128_128(a, b, &c);
-    return c;
+    if (a < b) {
+        return 0;
+    }
+    return a - b;
 }
 
 /**
@@ -1016,14 +896,11 @@ static inline uint128_t dap_uint128_substract(uint128_t a, uint128_t b)
  */
 static inline uint128_t dap_uint128_add(uint128_t a, uint128_t b)
 {
-    // uint128_t l_ret = a + b;
-    // if (l_ret < a || l_ret < b) {
-    //     return 0;
-    // }
-    // return l_ret;
-    uint128_t c = uint128_0;
-    SUM_128_128( a, b, &c);
-    return c;
+    uint128_t l_ret = a + b;
+    if (l_ret < a || l_ret < b) {
+        return 0;
+    }
+    return l_ret;
 }
 
 /**
@@ -1034,6 +911,6 @@ static inline uint128_t dap_uint128_add(uint128_t a, uint128_t b)
  */
 static inline bool dap_uint128_check_equal(uint128_t a, uint128_t b)
 {
-    //return a == b;
-    return EQUAL_128(a, b);
+    return a == b;
 }
+#endif
diff --git a/dap-sdk/core/src/dap_strfuncs.c b/dap-sdk/core/src/dap_strfuncs.c
index 08b7058d71bfc1fd22c3656f41dc049d01b8e8e8..c95ff68bb8aa653fa4004d0c1f9f86f1dd997a88 100755
--- a/dap-sdk/core/src/dap_strfuncs.c
+++ b/dap-sdk/core/src/dap_strfuncs.c
@@ -312,7 +312,7 @@ char* dap_strdup_vprintf(const char *a_format, va_list a_args)
  * @return char* a newly-allocated string holding the result
  */
 
-DAP_PRINTF_ATTR(1,2) char* dap_strdup_printf(const char *a_format, ...)
+char* dap_strdup_printf(const char *a_format, ...)
 {
     char *l_buffer;
     va_list l_args;
diff --git a/dap-sdk/core/test/uint256_t/unit_test.cpp b/dap-sdk/core/test/uint256_t/unit_test.cpp
index 064d0810b93503a3313483aa2a7f81fc1d57f807..ac4371c00f3453e25c9e2b960ae34416a03eed21 100644
--- a/dap-sdk/core/test/uint256_t/unit_test.cpp
+++ b/dap-sdk/core/test/uint256_t/unit_test.cpp
@@ -39,17 +39,17 @@ int main()
    
    int error_counter_sum_64_128=0;
     
-   uint128_t dap_test_128_shift=uint128_0; 
-   uint128_t dap_test_128_one=uint128_0;
-   uint128_t dap_test_128_two=uint128_0;
-   uint128_t dap_test_128_sub=uint128_0;
-   uint256_t dap_test_256_one=uint256_0;
-   uint256_t dap_test_256_two=uint256_0;
-   uint256_t dap_test_256_sum=uint256_0; 
-   uint256_t dap_test_256_sub=uint256_0; 
-   uint256_t dap_test_256_prod=uint256_0;
-   uint256_t dap_test_256_shift=uint256_0;
-   uint512_t dap_test_512_prod=uint512_0;
+   uint128_t dap_test_128_shift={.hi=0, .lo=0}; 
+   uint128_t dap_test_128_one={.hi=0, .lo=0};
+   uint128_t dap_test_128_two={.hi=0, .lo=0};
+   uint128_t dap_test_128_sub={.hi=0, .lo=0};
+   uint256_t dap_test_256_one={.hi=zero_128, .lo=zero_128};
+   uint256_t dap_test_256_two={.hi=zero_128, .lo=zero_128};
+   uint256_t dap_test_256_sum={.hi=zero_128, .lo=zero_128}; 
+   uint256_t dap_test_256_sub={.hi=zero_128, .lo=zero_128}; 
+   uint256_t dap_test_256_prod={.hi=zero_128, .lo=zero_128};
+   uint256_t dap_test_256_shift={.hi=zero_128, .lo=zero_128};
+   uint512_t dap_test_512_prod={.hi=zero_256, .lo=zero_256};
    int overflow_flag;
    int overflow_flag_prod;
    int borrow_flag_128;
@@ -308,8 +308,8 @@ if (division_enabled==1){
         prod_256_256_file << density_index << std::endl;}
 
         /////////////////////output of 256*256-->512//////////////////////
-        dap_test_512_prod.lo=uint256_0;
-        dap_test_512_prod.hi=uint256_0;
+        dap_test_512_prod.lo=zero_256;
+        dap_test_512_prod.hi=zero_256;
         uint256_t intermed_lo_prod;
         uint256_t intermed_hi_prod;
         MULT_128_256(dap_test_256_one.lo,dap_test_256_two.lo,&intermed_lo_prod);
@@ -442,8 +442,8 @@ if (division_enabled==1){
         dap_test_128_256_prod_one.hi=j;
         dap_test_128_256_prod_two.lo=max_64-(i+1);
         dap_test_128_256_prod_two.hi=max_64-2*(j+1);
-        dap_test_128_256_prod_prod.lo=uint128_0;
-        dap_test_128_256_prod_prod.hi=uint128_0;
+        dap_test_128_256_prod_prod.lo=zero_128;
+        dap_test_128_256_prod_prod.hi=zero_128;
         
         boost::multiprecision::uint256_t boost_test_128_256_prod;
         boost::multiprecision::uint128_t boost_test_128_256_one;
diff --git a/dap-sdk/crypto/src/dap_cert.c b/dap-sdk/crypto/src/dap_cert.c
index f813c276d6c9b3d1b66f57a20bc04ca374bf1bd2..8e77a4649d4d2e773c569adc4e32168d8cb2a6a1 100755
--- a/dap-sdk/crypto/src/dap_cert.c
+++ b/dap-sdk/crypto/src/dap_cert.c
@@ -848,4 +848,4 @@ void *dap_cert_get_meta_custom(dap_cert_t *a_cert, const char *a_field, size_t *
 void dap_cert_deinit()
 {
 
-}
\ No newline at end of file
+}
diff --git a/dap-sdk/net/client/dap_client.c b/dap-sdk/net/client/dap_client.c
index d9d364beaf5d2bb1c498295604df628dcb1548f2..d992fe2d8ec45b19c64b2f9581ff6a9cfdad7db0 100644
--- a/dap-sdk/net/client/dap_client.c
+++ b/dap-sdk/net/client/dap_client.c
@@ -177,46 +177,6 @@ uint16_t dap_client_get_uplink_port_unsafe(dap_client_t * a_client)
     return DAP_CLIENT_PVT(a_client)->uplink_port;
 }
 
-/**
- * @brief dap_client_set_auth_cert
- * @param a_client
- * @param a_chain_net_name
- * @param a_option
- */
-void dap_client_set_auth_cert(dap_client_t *a_client, const char *a_chain_net_name)
-{
-    const char *l_auth_hash_str = NULL;
-
-    if(a_client == NULL || a_chain_net_name == NULL){
-        log_it(L_ERROR,"Chain-net is NULL for dap_client_set_auth_cert");
-        return;
-    }
-
-    char *l_path = dap_strdup_printf("network/%s", a_chain_net_name);
-    if (!l_path) {
-        log_it(L_ERROR, "Can't allocate memory: file: %s line: %d", __FILE__, __LINE__);
-        return;
-    }
-
-    dap_config_t *l_cfg = dap_config_open(l_path);
-    free(l_path);
-    if (!l_cfg) {
-        log_it(L_ERROR, "Can't allocate memory: file: %s line: %d", __FILE__, __LINE__);
-        return;
-    }
-
-    dap_cert_t *l_cert = dap_cert_find_by_name(dap_config_get_item_str(l_cfg, "general", "auth_cert"));
-    if (!l_cert) {
-        dap_config_close(l_cfg);
-        log_it(L_ERROR,"l_cert is NULL by dap_cert_find_by_name");
-        return;
-    }
-    dap_client_set_auth_cert_unsafe(a_client, l_cert);
-
-    //dap_cert_delete(l_cert);
-    dap_config_close(l_cfg);
-}
-
 void dap_client_set_auth_cert_unsafe(dap_client_t * a_client, dap_cert_t *a_cert)
 {
     if(a_client == NULL){
diff --git a/dap-sdk/net/client/include/dap_client.h b/dap-sdk/net/client/include/dap_client.h
index 0173b8cc673cb8db251c47f18b0bf3f78b308cb0..8457e838b7cfd55a0c0ca6eabdce765d5d20e815 100644
--- a/dap-sdk/net/client/include/dap_client.h
+++ b/dap-sdk/net/client/include/dap_client.h
@@ -139,7 +139,6 @@ dap_stream_ch_t * dap_client_get_stream_ch_unsafe(dap_client_t * a_client, uint8
 const char * dap_client_get_stream_id(dap_client_t * a_client);
 void dap_client_set_active_channels_unsafe (dap_client_t * a_client, const char * a_active_channels);
 void dap_client_set_auth_cert_unsafe(dap_client_t * a_client, dap_cert_t *a_cert);
-void dap_client_set_auth_cert(dap_client_t *a_client, const char *a_chain_net_name);
 
 dap_client_stage_t dap_client_get_stage(dap_client_t * a_client);
 dap_client_stage_status_t dap_client_get_stage_status(dap_client_t * a_client);
diff --git a/modules/chain/CMakeLists.txt b/modules/chain/CMakeLists.txt
index fc43ed57b2c79b37f3089e46a481d739373c15c3..2c8a19c4eccc17aa4e1b6d4ec75d6af4ca321061 100644
--- a/modules/chain/CMakeLists.txt
+++ b/modules/chain/CMakeLists.txt
@@ -10,7 +10,7 @@ add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_SRCS} ${DAP_CHAIN_HEADERS})
 #find_package(PkgConfig REQUIRED)
 #pkg_search_module(GLIB REQUIRED glib-2.0)
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_chain_common dap_chain_mempool dap_chain_global_db ${GLIB_LDFLAGS})
-target_include_directories(${PROJECT_NAME} INTERFACE . include/ ${GLIB_INCLUDE_DIRS})
+target_link_libraries(dap_chain dap_core dap_chain_common dap_chain_mempool dap_chain_global_db ${GLIB_LDFLAGS})
+target_include_directories(dap_chain INTERFACE . include/ ${GLIB_INCLUDE_DIRS})
 target_include_directories(${PROJECT_NAME} PUBLIC include)
 target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../3rdparty/uthash/src)
diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c
index b5037d19a34ce23c7736fc7f2e7a9cfaad05e064..b577c8ad0c9a0fb63bf3ff2080eb6586ef27af36 100644
--- a/modules/chain/dap_chain.c
+++ b/modules/chain/dap_chain.c
@@ -209,9 +209,9 @@ void dap_chain_delete(dap_chain_t * a_chain)
  * @param a_atom_size
  * @return
  */
-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_cell_id_t a_cell_id)
+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, a_cell_id);
+    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);
     return l_ret;
@@ -251,15 +251,9 @@ static dap_chain_type_t s_chain_type_from_str(const char *a_type_str)
     if(!dap_strcmp(a_type_str, "emission")) {
         return CHAIN_TYPE_EMISSION;
     }
-    if(!dap_strcmp(a_type_str, "emission_256")) {
-        return CHAIN_TYPE_256_EMISSION;
-    }
     if(!dap_strcmp(a_type_str, "transaction")) {
         return CHAIN_TYPE_TX;
     }
-    if(!dap_strcmp(a_type_str, "transaction_256")) {
-        return CHAIN_TYPE_256_TX;
-    }
     if(!dap_strcmp(a_type_str, "ca")) {
         return CHAIN_TYPE_CA;
     }
@@ -280,15 +274,9 @@ static uint16_t s_datum_type_from_str(const char *a_type_str)
     if(!dap_strcmp(a_type_str, "emission")) {
         return DAP_CHAIN_DATUM_TOKEN_EMISSION;
     }
-    if(!dap_strcmp(a_type_str, "emission_256")) {
-        return DAP_CHAIN_DATUM_256_TOKEN_EMISSION;
-    }
     if(!dap_strcmp(a_type_str, "transaction")) {
         return DAP_CHAIN_DATUM_TX;
     }
-    if(!dap_strcmp(a_type_str, "transaction_256")) {
-        return DAP_CHAIN_DATUM_256_TX;
-    }
     return DAP_CHAIN_DATUM_CUSTOM;
 }
 
@@ -305,12 +293,8 @@ static uint16_t s_chain_type_convert(dap_chain_type_t a_type)
         return DAP_CHAIN_DATUM_TOKEN_DECL;
     case CHAIN_TYPE_EMISSION:
         return DAP_CHAIN_DATUM_TOKEN_EMISSION;
-    case CHAIN_TYPE_256_EMISSION:
-        return DAP_CHAIN_DATUM_256_TOKEN_EMISSION;
     case CHAIN_TYPE_TX:
         return DAP_CHAIN_DATUM_TX;
-    case CHAIN_TYPE_256_TX:
-        return DAP_CHAIN_DATUM_256_TX;
     default:
         return DAP_CHAIN_DATUM_CUSTOM;
     }
@@ -572,10 +556,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, dap_chain_cell_id_t a_cell_id)
+bool dap_chain_get_atom_last_hash(dap_chain_t * a_chain, dap_hash_fast_t * a_atom_hash)
 {
     bool l_ret = false;
-    dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain, a_cell_id);
+    dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain);
     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 5d8756db08e9c0b3192169a873a21f218cf8613f..833697d368db7f3974aa6c173f9dcf68256b67e8 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, a_cell->id);
+    dap_chain_atom_iter_t *l_atom_iter = a_atom ? NULL : a_cell->chain->callback_atom_iter_create(a_cell->chain);
     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 ea843466d9a295ec2bf098c16c66f42842724073..dc82cdf9c85eb73dbada1bd9021c6012478b30d3 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -70,10 +70,7 @@ static  pthread_rwlock_t s_verificators_rwlock;
 #define MAX_OUT_ITEMS   10
 typedef struct dap_chain_ledger_token_emission_item {
     dap_chain_hash_fast_t datum_token_emission_hash;
-    //union {
     dap_chain_datum_token_emission_t *datum_token_emission;
-    //   dap_chain_datum_256_token_emission_t *datum_256_token_emission; // 256
-    //};
     size_t datum_token_emission_size;
     UT_hash_handle hh;
 } dap_chain_ledger_token_emission_item_t;
@@ -121,18 +118,11 @@ typedef struct dap_chain_ledger_tx_item {
 } dap_chain_ledger_tx_item_t;
 
 typedef struct dap_chain_ledger_tokenizer {
-    bool type_256;
     char token_ticker[10];
     uint64_t sum;
     UT_hash_handle hh;
 } dap_chain_ledger_tokenizer_t;
 
-typedef struct dap_chain_ledger_tokenizer_256 {
-    char token_ticker[10];
-    uint256_t sum;
-    UT_hash_handle hh;
-} dap_chain_ledger_tokenizer_256_t;
-
 typedef struct dap_chain_ledger_tx_bound {
     dap_chain_hash_fast_t tx_prev_hash_fast;
     dap_chain_datum_tx_t *tx_prev;
@@ -152,8 +142,7 @@ typedef struct dap_chain_ledger_tx_bound {
 typedef struct dap_ledger_wallet_balance {
     char *key;
     char token_ticker[DAP_CHAIN_TICKER_SIZE_MAX];
-    //uint128_t balance;
-    uint256_t balance;
+    uint128_t balance;
     UT_hash_handle hh;
 } dap_ledger_wallet_balance_t;
 
@@ -1089,8 +1078,7 @@ void dap_chain_ledger_load_cache(dap_ledger_t *a_ledger)
         if (l_ptr++) {
             strcpy(l_balance_item->token_ticker, l_ptr);
         }
-        //l_balance_item->balance = *(uint128_t *)l_objs[i].value;
-        l_balance_item->balance = *(uint256_t *)l_objs[i].value;
+        l_balance_item->balance = *(uint128_t *)l_objs[i].value;
         HASH_ADD_KEYPTR(hh, l_ledger_pvt->balance_accounts, l_balance_item->key,
                         strlen(l_balance_item->key), l_balance_item);
     }
@@ -1153,12 +1141,8 @@ int dap_chain_ledger_token_emission_add_check(dap_ledger_t *a_ledger, byte_t *a_
                                        : &l_ledger_priv->treshold_emissions_rwlock);
     if(l_token_emission_item ) {
         if(s_debug_more)
-            if ( l_token_emission_item->datum_token_emission->hdr.type_value_256 )
-                log_it(L_ERROR, "Can't add token emission datum of %s %s ( %s ): already present in cache",
-                    dap_chain_u256tostr(l_token_emission_item->datum_token_emission->hdr.value_256), c_token_ticker, l_hash_str);
-            else
-                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);
+            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;
     }else if ( (! l_token_item) && ( l_threshold_emissions_count >= s_treshold_emissions_max)) {
         if(s_debug_more)
@@ -1207,12 +1191,8 @@ int dap_chain_ledger_token_emission_add_check(dap_ledger_t *a_ledger, byte_t *a_
 
                         if (l_aproves < l_aproves_valid ){
                             if(s_debug_more)
-                                if ( l_emission->hdr.type_value_256 ) // 256
-                                   log_it(L_WARNING, "Emission of %s datoshi of %s:%s is wrong: only %u valid aproves when %u need",
-                                       dap_chain_u256tostr(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 );
+                                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 );
                             ret = -1;
                         }
                     }
@@ -1291,20 +1271,11 @@ int dap_chain_ledger_token_emission_add(dap_ledger_t *a_ledger, byte_t *a_token_
             DAP_DELETE(l_gdb_group);
             char * l_token_emission_address_str = dap_chain_addr_to_str(&(l_token_emission_item->datum_token_emission->hdr.address) );
             if(s_debug_more)
-                if ( l_token_emission_item->datum_token_emission->hdr.type_value_256 ) // 256
-                    log_it(L_NOTICE, "Added token emission datum to %s: type=%s value=%.1Lf token=%s to_addr=%s ",
-                               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_datoshi_to_coins(
-                                    dap_chain_uint128_from_uint256(l_token_emission_item->datum_token_emission->hdr.value_256)
-                                ), c_token_ticker,
-                               l_token_emission_address_str);
-                else
-                    log_it(L_NOTICE, "Added token emission datum to %s: type=%s value=%.1Lf token=%s to_addr=%s ",
-                               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_datoshi_to_coins(l_token_emission_item->datum_token_emission->hdr.value), c_token_ticker,
-                               l_token_emission_address_str);
+                log_it(L_NOTICE, "Added token emission datum to %s: type=%s value=%.1Lf token=%s to_addr=%s ",
+                           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_datoshi_to_coins(l_token_emission_item->datum_token_emission->hdr.value), c_token_ticker,
+                           l_token_emission_address_str);
             DAP_DELETE(l_token_emission_address_str);
         }else{
             if(s_debug_more)
@@ -1315,12 +1286,9 @@ int dap_chain_ledger_token_emission_add(dap_ledger_t *a_ledger, byte_t *a_token_
     } else {
         if (l_token_item) {
             if(s_debug_more)
-                if ( ((dap_chain_datum_token_emission_t *)a_token_emission)->hdr.type_value_256 ) // 256
-                    log_it(L_ERROR, "Duplicate token emission datum of %s %s ( %s )",
-                            dap_chain_u256tostr(((dap_chain_datum_token_emission_t *)a_token_emission)->hdr.value_256), c_token_ticker, l_hash_str);
-                else
-                    log_it(L_ERROR, "Duplicate token emission datum of %"DAP_UINT64_FORMAT_U" %s ( %s )",
-                            ((dap_chain_datum_token_emission_t *)a_token_emission)->hdr.value, c_token_ticker, l_hash_str);
+                log_it(L_ERROR, "Duplicate token emission datum of %"DAP_UINT64_FORMAT_U" %s ( %s )",
+                                ((dap_chain_datum_token_emission_t *)a_token_emission)->hdr.value,
+                                c_token_ticker, l_hash_str);
         }
         ret = -1;
     }
@@ -1351,7 +1319,6 @@ int dap_chain_ledger_token_emission_load(dap_ledger_t *a_ledger, byte_t *a_token
 dap_chain_datum_token_emission_t * dap_chain_ledger_token_emission_find(dap_ledger_t *a_ledger,
         const char *a_token_ticker, const dap_chain_hash_fast_t *a_token_emission_hash)
 {
-
     dap_ledger_private_t *l_ledger_priv = PVT(a_ledger);
     dap_chain_datum_token_emission_t * l_token_emission = NULL;
     dap_chain_ledger_token_item_t * l_token_item = NULL;
@@ -1617,10 +1584,6 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
     // sum of values in 'out' items from the previous transactions
     dap_chain_ledger_tokenizer_t *l_values_from_prev_tx = NULL, *l_values_from_cur_tx = NULL,
                                  *l_value_cur = NULL, *l_tmp = NULL, *l_res = NULL;
-    
-    dap_chain_ledger_tokenizer_256_t *l_values_from_prev_tx_256 = NULL, *l_values_from_cur_tx_256 = NULL,
-                                 *l_value_cur_256 = NULL, *l_tmp_256 = NULL, *l_res_256 = NULL;
-
     char *l_token = NULL;
     dap_chain_ledger_token_item_t * l_token_item = NULL;
     dap_chain_hash_fast_t *l_emission_hash;
@@ -1659,9 +1622,6 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
         dap_chain_tx_in_cond_t *l_tx_in_cond;
         dap_chain_hash_fast_t l_tx_prev_hash={0};
         uint8_t l_cond_type = *(uint8_t *)l_list_tmp->data;
-
-        bool l_is_type_256 = false; // 256 type
-
         // one of the previous transaction
         if (l_cond_type == TX_ITEM_TYPE_IN) {
             l_tx_in = (dap_chain_tx_in_t *)l_list_tmp->data;
@@ -1695,17 +1655,12 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
             l_is_first_transaction = true;
             if (!l_token) {
                 dap_chain_tx_token_t *l_tx_token = (dap_chain_tx_token_t *)dap_chain_datum_tx_item_get(a_tx, NULL, TX_ITEM_TYPE_TOKEN, NULL);
-                dap_chain_tx_token_t *l_tx_token_256 = (dap_chain_tx_token_t *)dap_chain_datum_tx_item_get(a_tx, NULL, TX_ITEM_TYPE_256_TOKEN, NULL);
-                if (l_tx_token) { // TX_ITEM_TYPE_TOKEN
-                    l_token = l_tx_token->header.ticker;
-                    l_emission_hash = &l_tx_token->header.token_emission_hash;
-                } else if (l_tx_token_256) { // TX_ITEM_TYPE_256_TOKEN
-                    l_token = l_tx_token_256->header.ticker;
-                    l_emission_hash = &l_tx_token_256->header.token_emission_hash;
-                } else {
+                if (!l_tx_token) {
                     l_err_num = -4;
                     break;
                 }
+                l_token = l_tx_token->header.ticker;
+                l_emission_hash = &l_tx_token->header.token_emission_hash;
             }
             DAP_DELETE(bound_item);
             continue;
@@ -1747,8 +1702,6 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
         }
 
         uint64_t l_value;
-        uint256_t l_value_256 = uint256_0;
-
         // Get list of all 'out' items from previous transaction
         dap_list_t *l_list_prev_out = dap_chain_datum_tx_items_get(l_tx_prev, TX_ITEM_TYPE_OUT_ALL, NULL);
         // Get one 'out' item in previous transaction bound with current 'in' item
@@ -1760,15 +1713,16 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
         }
         if (l_cond_type == TX_ITEM_TYPE_IN) {
             dap_chain_tx_item_type_t l_type = *(uint8_t *)l_tx_prev_out;
-
-            if ( l_type == TX_ITEM_TYPE_OUT || l_type == TX_ITEM_TYPE_256_OUT ) {
+            if (l_type == TX_ITEM_TYPE_OUT) {
                 bound_item->out.tx_prev_out = l_tx_prev_out;
-                memcpy(&l_tx_in_from, &bound_item->out.tx_prev_out->addr,sizeof (bound_item->out.tx_prev_out->addr));                
-            } else {
+                memcpy(&l_tx_in_from, &bound_item->out.tx_prev_out->addr,sizeof (bound_item->out.tx_prev_out->addr));
+            } else if (l_type == TX_ITEM_TYPE_OUT_EXT) {
                 bound_item->out.tx_prev_out_ext = l_tx_prev_out;
                 memcpy(&l_tx_in_from, &bound_item->out.tx_prev_out_ext->addr,sizeof (bound_item->out.tx_prev_out_ext->addr));
+            } else {
+                l_err_num = -8;
+                break;
             }
-
             // calculate hash of public key in current transaction
             dap_chain_hash_fast_t l_hash_pkey;
             {
@@ -1783,43 +1737,27 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
                 // calculate hash from public key
                 dap_hash_fast(l_pkey_ser, l_pkey_ser_size, &l_hash_pkey);
                 // hash of public key in 'out' item of previous transaction
-
-                uint8_t *l_prev_out_addr_key = (l_type == TX_ITEM_TYPE_OUT || l_type == TX_ITEM_TYPE_256_OUT) ?
+                uint8_t *l_prev_out_addr_key = (l_type == TX_ITEM_TYPE_OUT) ?
                                                 bound_item->out.tx_prev_out->addr.data.key :
                                                 bound_item->out.tx_prev_out_ext->addr.data.key;
-
                 // 4. compare public key hashes in the signature of the current transaction and in the 'out' item of the previous transaction
                 if(memcmp(&l_hash_pkey, l_prev_out_addr_key, sizeof(dap_chain_hash_fast_t))) {
                     l_err_num = -9;
                     break;
                 }
             }
-
-            switch (l_type) {
-                case TX_ITEM_TYPE_256_OUT: // 256
-                    l_value_256 = bound_item->out.tx_prev_out->header.value_256; break;
-                case TX_ITEM_TYPE_OUT:
-                    l_value = bound_item->out.tx_prev_out->header.value; break;
-                case TX_ITEM_TYPE_256_OUT_EXT: // 256
-                    l_value_256 = bound_item->out.tx_prev_out_ext->header.value_256;
-                    l_token = bound_item->out.tx_prev_out_ext->token;
-                break;
-                case TX_ITEM_TYPE_OUT_EXT:
-                    l_value = bound_item->out.tx_prev_out_ext->header.value;
-                    l_token = bound_item->out.tx_prev_out_ext->token;
-                break;
-                default:
-                    log_it(L_DEBUG, "Unknown item type %d", l_type);
-                    break;
+            if (l_type == TX_ITEM_TYPE_OUT) {
+                l_value = bound_item->out.tx_prev_out->header.value;
+            } else {
+                l_value = bound_item->out.tx_prev_out_ext->header.value;
+                l_token = bound_item->out.tx_prev_out_ext->token;
             }
-
         } else { // TX_ITEM_TYPE_IN_COND
-            dap_chain_tx_item_type_t l_type = *(uint8_t *)l_tx_prev_out;
-            if( l_type != TX_ITEM_TYPE_OUT_COND && l_type != TX_ITEM_TYPE_256_OUT_COND) {
+            if(*(uint8_t *)l_tx_prev_out != TX_ITEM_TYPE_OUT_COND) {
                 l_err_num = -8;
                 break;
             }
-            if (!l_token_item){
+            if (! l_token_item){
                 l_err_num = -16;
                 log_it(L_ERROR,"Can't find token item for conditioned tx out");
                 break;
@@ -1833,11 +1771,7 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
             dap_sign_t *l_sign = dap_chain_datum_tx_item_sign_get_sig((dap_chain_tx_sig_t *)l_tx_sig);
             size_t l_pkey_ser_size = 0;
             const uint8_t *l_pkey_ser = dap_sign_get_pkey(l_sign, &l_pkey_ser_size);
-
             dap_chain_tx_out_cond_t *l_tx_prev_out_cond = (dap_chain_tx_out_cond_t *)l_tx_prev_out;
-
-            l_is_type_256 = l_type == TX_ITEM_TYPE_256_OUT_COND ? true : false;
-
             bool l_owner = false;
             if (l_pkey_ser_size == l_prev_pkey_ser_size &&
                     !memcmp(l_prev_pkey_ser, l_pkey_ser, l_prev_pkey_ser_size)) {
@@ -1859,13 +1793,9 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
                 l_err_num = -14;
                 break;
             }
-
             bound_item->out.tx_prev_out_cond = l_tx_prev_out_cond;
-            if ( l_type == TX_ITEM_TYPE_256_OUT_COND ) { // 256
-                l_value_256 = l_tx_prev_out_cond->header.value_256;
-            } else {
-                l_value = l_tx_prev_out_cond->header.value;
-            }
+            // calculate sum of values from previous transactions
+            l_value = l_tx_prev_out_cond->header.value;
             l_token = NULL;
         }
         if (!l_token || !*l_token) {
@@ -1887,7 +1817,6 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
             l_err_num = -15;
             break;
         }
-
         // Check permissions
         if ( (l_token_item->flags & DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_SENDER_BLOCKED ) ||  // If all is blocked - check if we're
              (l_token_item->flags & DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_FROZEN) ){ // in white list
@@ -1915,26 +1844,14 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
             }
         }
 
-        if ( l_is_type_256 ) { // 256
-            HASH_FIND_STR(l_values_from_prev_tx_256, l_token, l_value_cur_256);
-            if (!l_value_cur_256) {
-                l_value_cur_256 = DAP_NEW_Z(dap_chain_ledger_tokenizer_256_t);
-                strcpy(l_value_cur_256->token_ticker, l_token);
-                HASH_ADD_STR(l_values_from_prev_tx_256, token_ticker, l_value_cur_256);
-            }
-            SUM_256_256(l_value_cur_256->sum, l_value_256, &l_value_cur_256->sum);
-
-        } else {
-            HASH_FIND_STR(l_values_from_prev_tx, l_token, l_value_cur);
-            if (!l_value_cur) {
-                l_value_cur = DAP_NEW_Z(dap_chain_ledger_tokenizer_t);
-                strcpy(l_value_cur->token_ticker, l_token);
-                HASH_ADD_STR(l_values_from_prev_tx, token_ticker, l_value_cur);
-            }
-            // calculate sum of values from previous transactions per each token
-            l_value_cur->sum += l_value;
+        HASH_FIND_STR(l_values_from_prev_tx, l_token, l_value_cur);
+        if (!l_value_cur) {
+            l_value_cur = DAP_NEW_Z(dap_chain_ledger_tokenizer_t);
+            strcpy(l_value_cur->token_ticker, l_token);
+            HASH_ADD_STR(l_values_from_prev_tx, token_ticker, l_value_cur);
         }
-
+        // calculate sum of values from previous transactions per each token
+        l_value_cur->sum += l_value;
         l_list_bound_items = dap_list_append(l_list_bound_items, bound_item);
     }
     if (l_list_in)
@@ -1947,43 +1864,30 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
         HASH_ITER(hh, l_values_from_prev_tx, l_value_cur, l_tmp) {
             DAP_DELETE(l_value_cur);
         }
-        HASH_ITER(hh, l_values_from_prev_tx_256, l_value_cur_256, l_tmp_256) {
-            DAP_DELETE(l_value_cur_256);
-        }
         return l_err_num;
     }
 
     // 6. Compare sum of values in 'out' items in the current transaction and in the previous transactions
     // Calculate the sum of values in 'out' items from the current transaction
     bool l_multichannel = false;
-    if (HASH_COUNT(l_values_from_prev_tx) > 1){ 
+    if (HASH_COUNT(l_values_from_prev_tx) > 1) {
         l_multichannel = true;
     } else {
         l_value_cur = DAP_NEW_Z(dap_chain_ledger_tokenizer_t);
         if(l_token)
             strcpy(l_value_cur->token_ticker, l_token);
         HASH_ADD_STR(l_values_from_cur_tx, token_ticker, l_value_cur);
-
-        // 256
-        l_value_cur_256 = DAP_NEW_Z(dap_chain_ledger_tokenizer_256_t);
-        if(l_token)
-            strcpy(l_value_cur_256->token_ticker, l_token);
-        HASH_ADD_STR(l_values_from_cur_tx_256, token_ticker, l_value_cur_256);
     }
-
     dap_list_t *l_list_tx_out = NULL;
     bool emission_flag = !l_is_first_transaction || (l_is_first_transaction && l_ledger_priv->check_token_emission);
     // find 'out' items
     dap_list_t *l_list_out = dap_chain_datum_tx_items_get((dap_chain_datum_tx_t*) a_tx, TX_ITEM_TYPE_OUT_ALL, NULL);
     uint64_t l_value=0;
-    uint256_t l_value_256=uint256_0;
     for (l_list_tmp = l_list_out; l_list_tmp; l_list_tmp = dap_list_next(l_list_tmp)) {
         dap_chain_tx_item_type_t l_type = *(uint8_t *)l_list_tmp->data;
         dap_chain_addr_t l_tx_out_to={0};
-        bool l_is_type_256 = false;
-
-        if (l_type == TX_ITEM_TYPE_OUT) {
-            l_is_type_256 = false;
+        if (l_type == TX_ITEM_TYPE_OUT)
+        {
             dap_chain_tx_out_t *l_tx_out = (dap_chain_tx_out_t *)l_list_tmp->data;
             if (l_multichannel) { // token ticker is mandatory for multichannel transactions
                 l_err_num = -16;
@@ -1994,22 +1898,7 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
             }
             memcpy(&l_tx_out_to , &l_tx_out->addr, sizeof (l_tx_out_to));
             l_list_tx_out = dap_list_append(l_list_tx_out, l_tx_out);
- 
-        } else if (l_type == TX_ITEM_TYPE_256_OUT) { // 256
-            l_is_type_256 = true;
-            dap_chain_tx_out_t *l_tx_out = (dap_chain_tx_out_t *)l_list_tmp->data;
-            if (l_multichannel) { // token ticker is mandatory for multichannel transactions
-                l_err_num = -16;
-                break;
-            }
-            if (emission_flag) {
-                 l_value_256 = l_tx_out->header.value_256;
-            }
-            memcpy(&l_tx_out_to , &l_tx_out->addr, sizeof (l_tx_out_to));
-            l_list_tx_out = dap_list_append(l_list_tx_out, l_tx_out);
-
         } else if (l_type == TX_ITEM_TYPE_OUT_EXT) {
-            l_is_type_256 = false;
             dap_chain_tx_out_ext_t *l_tx_out = (dap_chain_tx_out_ext_t *)l_list_tmp->data;
             if (!l_multichannel) { // token ticker is depricated for single-channel transactions
                 l_err_num = -16;
@@ -2021,23 +1910,7 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
             }
             memcpy(&l_tx_out_to , &l_tx_out->addr, sizeof (l_tx_out_to));
             l_list_tx_out = dap_list_append(l_list_tx_out, l_tx_out);
-
-        } else if (l_type == TX_ITEM_TYPE_256_OUT_EXT) { // 256
-            l_is_type_256 = true;
-            dap_chain_tx_out_ext_t *l_tx_out = (dap_chain_tx_out_ext_t *)l_list_tmp->data;
-            if (!l_multichannel) { // token ticker is depricated for single-channel transactions
-                l_err_num = -16;
-                break;
-            }
-            if (emission_flag) {
-                 l_value_256 = l_tx_out->header.value_256;
-                 l_token = l_tx_out->token;
-            }
-            memcpy(&l_tx_out_to , &l_tx_out->addr, sizeof (l_tx_out_to));
-            l_list_tx_out = dap_list_append(l_list_tx_out, l_tx_out);
-
         } else if (l_type == TX_ITEM_TYPE_OUT_COND) {
-            l_is_type_256 = false;
             dap_chain_tx_out_cond_t *l_tx_out = (dap_chain_tx_out_cond_t *)l_list_tmp->data;
             if (emission_flag) {
                 l_value = l_tx_out->header.value;
@@ -2048,42 +1921,16 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
                 break;
             }
             l_list_tx_out = dap_list_append(l_list_tx_out, l_tx_out);
-
-        } else if (l_type == TX_ITEM_TYPE_256_OUT_COND) { // 256
-            l_is_type_256 = true;
-            dap_chain_tx_out_cond_t *l_tx_out = (dap_chain_tx_out_cond_t *)l_list_tmp->data;
-            if (emission_flag) {
-                l_value_256 = l_tx_out->header.value_256;
-            }
-            if (l_multichannel) { // out_cond have no field .token
-                log_it(L_WARNING, "No conditional output support for multichannel transaction");
-                l_err_num = -18;
-                break;
-            }
-            l_list_tx_out = dap_list_append(l_list_tx_out, l_tx_out);
         }
-
-        if (l_is_type_256) { // 256
-            if (l_multichannel) {
-                HASH_FIND_STR(l_values_from_cur_tx_256, l_token, l_value_cur_256);
-                if (!l_value_cur_256) {
-                    l_value_cur_256 = DAP_NEW_Z(dap_chain_ledger_tokenizer_256_t);
-                    strcpy(l_value_cur_256->token_ticker, l_token);
-                    HASH_ADD_STR(l_values_from_cur_tx_256, token_ticker, l_value_cur_256);
-                }
-            }
-            SUM_256_256(l_value_cur_256->sum, l_value_256, &l_value_cur_256->sum);
-        } else {
-            if (l_multichannel) {
-                HASH_FIND_STR(l_values_from_cur_tx, l_token, l_value_cur);
-                if (!l_value_cur) {
-                    l_value_cur = DAP_NEW_Z(dap_chain_ledger_tokenizer_t);
-                    strcpy(l_value_cur->token_ticker, l_token);
-                    HASH_ADD_STR(l_values_from_cur_tx, token_ticker, l_value_cur);
-                }
+        if (l_multichannel) {
+            HASH_FIND_STR(l_values_from_cur_tx, l_token, l_value_cur);
+            if (!l_value_cur) {
+                l_value_cur = DAP_NEW_Z(dap_chain_ledger_tokenizer_t);
+                strcpy(l_value_cur->token_ticker, l_token);
+                HASH_ADD_STR(l_values_from_cur_tx, token_ticker, l_value_cur);
             }
-            l_value_cur->sum += l_value;
         }
+        l_value_cur->sum += l_value;
 
         // Get permissions for token
         l_token_item = NULL;
@@ -2126,6 +1973,7 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
         }
     }
 
+
     if ( l_list_out )
         dap_list_free(l_list_out);
 
@@ -2134,12 +1982,10 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
         if (l_ledger_priv->check_token_emission) { // Check the token emission
             dap_chain_datum_token_emission_t * l_token_emission = dap_chain_ledger_token_emission_find(a_ledger, l_token, l_emission_hash);
             if (l_token_emission) {
-                if (l_token_emission->hdr.value != l_value_cur->sum &&
-                        !EQUAL_256(l_token_emission->hdr.value_256, l_value_cur_256->sum) ) {
+                if (l_token_emission->hdr.value != l_value_cur->sum) {
                     l_err_num = -10;
                 }
                 l_value_cur = NULL;
-                l_value_cur_256 = NULL;
             } else {
                 log_it(L_WARNING, "Emission for tx_token wasn't found");
                 l_err_num = DAP_CHAIN_CS_VERIFY_CODE_TX_NO_EMISSION;
@@ -2148,33 +1994,17 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
         }
         break;
     }
-
     while (!l_is_first_transaction && !l_err_num) {
-        bool l_err_flag = false;
-        bool l_err_flag_256 = false;
         HASH_ITER(hh, l_values_from_prev_tx, l_value_cur, l_tmp) {
             HASH_FIND_STR(l_values_from_cur_tx, l_value_cur->token_ticker, l_res);
-            if (!l_res || (l_res->sum != l_value_cur->sum) ){ //&& !EQUAL_256(l_res->sum_256,l_value_cur->sum_256) ) ) {
+            if (!l_res || l_res->sum != l_value_cur->sum) {
                 if(s_debug_more)
                     log_it(L_ERROR, "Sum of values in out items of current tx (%"DAP_UINT64_FORMAT_U") is not equal outs from previous tx (%"DAP_UINT64_FORMAT_U") for token %s",
                        l_res ? l_res->sum : 0, l_value_cur->sum, l_value_cur->token_ticker);
-                l_err_flag = true;
+                l_err_num = -12;
                 break;
             }
         }
-        HASH_ITER(hh, l_values_from_prev_tx_256, l_value_cur_256, l_tmp_256) {
-            HASH_FIND_STR(l_values_from_cur_tx_256, l_value_cur_256->token_ticker, l_res_256);
-            if (!l_res_256 || !EQUAL_256(l_res_256->sum,l_value_cur_256->sum) ) {
-                if(s_debug_more)
-                    log_it(L_ERROR, "Sum of values in out items of current tx 256 (%s) is not equal outs from previous tx (%s) for token %s",
-                       dap_chain_u256tostr( ( l_res_256 ? l_res_256->sum : uint256_0) ), dap_chain_u256tostr(l_value_cur_256->sum), l_value_cur_256->token_ticker);
-                l_err_flag_256 = true;
-                break;
-            }
-        }
-        if ( l_err_flag && l_err_flag_256 ) 
-            l_err_num = -12;
-
         break;
     }
 
@@ -2184,15 +2014,6 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
     HASH_ITER(hh, l_values_from_cur_tx, l_value_cur, l_tmp) {
         DAP_DELETE(l_value_cur);
     }
-
-    // 256
-    HASH_ITER(hh, l_values_from_prev_tx_256, l_value_cur_256, l_tmp_256) {
-        DAP_DELETE(l_value_cur_256);
-    }
-    HASH_ITER(hh, l_values_from_cur_tx_256, l_value_cur_256, l_tmp_256) {
-        DAP_DELETE(l_value_cur_256);
-    }
-
     if (!a_list_bound_items || l_err_num) {
         dap_list_free_full(l_list_bound_items, free);
     } else {
@@ -2238,10 +2059,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);
+    uint128_t *l_balance_value = DAP_NEW_Z(uint128_t);
     *l_balance_value = a_balance->balance;
-    if (!dap_chain_global_db_gr_set(dap_strdup(a_balance->key), l_balance_value, sizeof(uint256_t/*uint128_t*/), l_gdb_group)) {
+    if (!dap_chain_global_db_gr_set(dap_strdup(a_balance->key), l_balance_value, sizeof(uint128_t), l_gdb_group)) {
         if(s_debug_more)
             log_it(L_WARNING, "Ledger cache mismatch");
         DAP_DELETE(l_balance_value);
@@ -2345,7 +2165,6 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx,
         ret = l_ret_check;
         goto FIN;
     }
-
     if(s_debug_more)
         log_it ( L_DEBUG, "dap_chain_ledger_tx_add() check passed for tx %s",l_tx_hash_str);
 
@@ -2358,63 +2177,42 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx,
     // find all bound pairs 'in' and 'out'
     dap_list_t *l_list_tmp = l_list_bound_items;
     char *l_ticker_trl = NULL, *l_ticker_old_trl = NULL;
-
     bool l_stake_updated = false;
-
     // Update balance: deducts
     while(l_list_tmp) {
         dap_chain_ledger_tx_bound_t *bound_item = l_list_tmp->data;
         void *l_item_in = *(void **)&bound_item->in;
-        void *l_item_out = *(void **)&bound_item->out;
         dap_chain_tx_item_type_t l_type = *(uint8_t *)l_item_in;
-        dap_chain_tx_item_type_t l_out_type = *(uint8_t *)l_item_out;
-
         dap_chain_ledger_tx_item_t *l_prev_item_out = bound_item->item_out;
-
         l_ticker_trl = *l_prev_item_out->cache_data.token_tiker
                 ? dap_stpcpy(l_token_ticker, l_prev_item_out->cache_data.token_tiker)
                 : dap_stpcpy(l_token_ticker, bound_item->out.tx_prev_out_ext->token);
-        
         if (!l_multichannel && l_ticker_old_trl && strcmp(l_token_ticker, l_token_ticker_old)) {
             l_multichannel = true;
         }
         l_ticker_old_trl = dap_stpcpy(l_token_ticker_old, l_token_ticker);
         int l_tx_prev_out_used_idx;
-
         if (l_type == TX_ITEM_TYPE_IN) {
             dap_chain_tx_in_t *l_tx_in = bound_item->in.tx_cur_in;
             dap_ledger_wallet_balance_t *wallet_balance = NULL;
-            //void *l_item_out = *(void **)&bound_item->out;
-            //dap_chain_tx_item_type_t l_out_type = *(uint8_t *)l_item_out;
-
-            //dap_chain_addr_t *l_addr = NULL;
-            uint256_t l_value = uint256_0;
-
-            dap_chain_addr_t *l_addr = (l_out_type == TX_ITEM_TYPE_OUT || l_out_type == TX_ITEM_TYPE_256_OUT) ?
+            void *l_item_out = *(void **)&bound_item->out;
+            dap_chain_tx_item_type_t l_out_type = *(uint8_t *)l_item_out;
+            dap_chain_addr_t *l_addr = (l_out_type == TX_ITEM_TYPE_OUT) ?
                                         &bound_item->out.tx_prev_out->addr :
                                         &bound_item->out.tx_prev_out_ext->addr;
-
             char *l_addr_str = dap_chain_addr_to_str(l_addr);
             char *l_wallet_balance_key = dap_strjoin(" ", l_addr_str, l_token_ticker, (char*)NULL);
             pthread_rwlock_rdlock(&PVT(a_ledger)->balance_accounts_rwlock);
             HASH_FIND_STR(PVT(a_ledger)->balance_accounts, l_wallet_balance_key, wallet_balance);
             pthread_rwlock_unlock(&PVT(a_ledger)->balance_accounts_rwlock);
             if (wallet_balance) {
-                switch (l_out_type) {
-                    case TX_ITEM_TYPE_256_OUT: l_value = bound_item->out.tx_prev_out->header.value_256; break;
-                    case TX_ITEM_TYPE_OUT: l_value = GET_256_FROM_64(bound_item->out.tx_prev_out->header.value); break;
-                    case TX_ITEM_TYPE_256_OUT_EXT: l_value = bound_item->out.tx_prev_out_ext->header.value_256; break;
-                    case TX_ITEM_TYPE_OUT_EXT: l_value = GET_256_FROM_64(bound_item->out.tx_prev_out_ext->header.value); break;
-                    default:
-                        log_it(L_DEBUG, "Unknown item type %d", l_type);
-                    break;
-                }
-
+                uint64_t l_value = (l_out_type == TX_ITEM_TYPE_OUT) ?
+                                    bound_item->out.tx_prev_out->header.value :
+                                    bound_item->out.tx_prev_out_ext->header.value;
                 if(s_debug_more)
-                    log_it(L_DEBUG,"SPEND %s from addr: %s", dap_chain_u256tostr(l_value), l_wallet_balance_key);
-                
-                SUBTRACT_256_256(wallet_balance->balance, l_value, &wallet_balance->balance);
-
+                    log_it(L_DEBUG,"SPEND %"DAP_UINT64_FORMAT_U" from addr: %s", l_value, l_wallet_balance_key);
+                uint128_t l_sub = dap_chain_uint128_from(l_value);
+                wallet_balance->balance = dap_uint128_substract(wallet_balance->balance, l_sub);
                 // Update the cache
                 s_balance_cache_update(a_ledger, wallet_balance);
             } else {
@@ -2423,11 +2221,9 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx,
             }
             DAP_DELETE(l_addr_str);
             DAP_DELETE(l_wallet_balance_key);
-
             /// Mark 'out' item in cache because it used
             l_tx_prev_out_used_idx = l_tx_in->header.tx_out_prev_idx;
         } else { // TX_ITEM_TYPE_IN_COND
-
             // all balance deducts performed with previous conditional transaction
             dap_chain_tx_in_cond_t *l_tx_in_cond = bound_item->in.tx_cur_in_cond;
             /// Mark 'out' item in cache because it used
@@ -2446,7 +2242,6 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx,
                 l_stake_updated = true;
             }
         }
-
         // add a used output
         memcpy(&(l_prev_item_out->cache_data.tx_hash_spent_fast[l_tx_prev_out_used_idx]), l_tx_hash, sizeof(dap_chain_hash_fast_t));
         l_prev_item_out->cache_data.n_outs_used++;
@@ -2479,11 +2274,9 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx,
                 goto FIN;
             }
         }
-
         // go to next previous transaction
         l_list_tmp = dap_list_next(l_list_tmp);
     }
-
     if (l_list_bound_items)
         dap_list_free_full(l_list_bound_items, free);
 
@@ -2493,18 +2286,15 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx,
         //dap_list_t *l_base_tx_list = dap_chain_datum_tx_items_get(a_tx, TX_ITEM_TYPE_TOKEN, &l_base_tx_count );
         //if (l_base_tx_count >=1  && l_base_tx_list){
         dap_chain_tx_token_t * l_tx_token = (dap_chain_tx_token_t *) dap_chain_datum_tx_item_get(a_tx, NULL, TX_ITEM_TYPE_TOKEN, NULL);
-        dap_chain_tx_token_t * l_tx_token_256 = (dap_chain_tx_token_t *) dap_chain_datum_tx_item_get(a_tx, NULL, TX_ITEM_TYPE_256_TOKEN, NULL);
-
-        if ( l_tx_token_256 )
-            l_ticker_trl = dap_stpcpy(l_token_ticker, l_tx_token_256->header.ticker);
-        else if (l_tx_token)
+        if (l_tx_token)
             l_ticker_trl = dap_stpcpy(l_token_ticker, l_tx_token->header.ticker);
+        //}
     }
 
     //Update balance : raise
     for (dap_list_t *l_tx_out = l_list_tx_out; l_tx_out; l_tx_out = dap_list_next(l_tx_out)) {
         dap_chain_tx_item_type_t l_type = *(uint8_t *)l_tx_out->data;
-        if (l_type == TX_ITEM_TYPE_OUT_COND || l_type == TX_ITEM_TYPE_256_OUT_COND) {
+        if (l_type == TX_ITEM_TYPE_OUT_COND) {
             // Update stakes if any
             dap_chain_tx_out_cond_t *l_cond = (dap_chain_tx_out_cond_t *)l_tx_out->data;
             if (l_cond->header.subtype == DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE && !l_stake_updated) {
@@ -2519,24 +2309,17 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx,
             }
             continue;   // balance raise will be with next conditional transaction
         }
-
         dap_chain_tx_out_t *l_out_item = NULL;
         dap_chain_tx_out_ext_t *l_out_item_ext = NULL;
-        switch (l_type) {
-            case TX_ITEM_TYPE_256_OUT: l_out_item = (dap_chain_tx_out_t *)l_tx_out->data; break;
-            case TX_ITEM_TYPE_OUT: l_out_item = (dap_chain_tx_out_t *)l_tx_out->data; break;
-            case TX_ITEM_TYPE_256_OUT_EXT: l_out_item_ext = (dap_chain_tx_out_ext_t *)l_tx_out->data; break;
-            case TX_ITEM_TYPE_OUT_EXT: l_out_item_ext = (dap_chain_tx_out_ext_t *)l_tx_out->data; break;
-            default:
-                log_it(L_DEBUG, "Unknown item type %d", l_type);
-                break;
+        if (l_type == TX_ITEM_TYPE_OUT) {
+            l_out_item = (dap_chain_tx_out_t *)l_tx_out->data;
+        } else {
+            l_out_item_ext = (dap_chain_tx_out_ext_t *)l_tx_out->data;
         }
-
         if ((l_out_item  || l_out_item_ext) && l_ticker_trl) {
-             dap_chain_addr_t *l_addr = (l_type == TX_ITEM_TYPE_OUT || l_type == TX_ITEM_TYPE_256_OUT) ?
+             dap_chain_addr_t *l_addr = (l_type == TX_ITEM_TYPE_OUT) ?
                                         &l_out_item->addr :
                                         &l_out_item_ext->addr;
-
             char *l_addr_str = dap_chain_addr_to_str(l_addr);
 
             //log_it (L_DEBUG, "Check unspent %.03Lf %s for addr %s",
@@ -2547,30 +2330,18 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx,
                 l_ticker_trl = dap_stpcpy(l_token_ticker, l_out_item_ext->token);
             }
             char *l_wallet_balance_key = dap_strjoin(" ", l_addr_str, l_token_ticker, (char*)NULL);
+            uint64_t l_value =  (l_type == TX_ITEM_TYPE_OUT) ? l_out_item->header.value : l_out_item_ext->header.value;
 
-            uint64_t l_value = 0;
-            uint256_t l_value_256 = uint256_0;
-            switch (l_type) {
-                case TX_ITEM_TYPE_256_OUT: l_value_256 = l_out_item->header.value_256; break; // _256
-                case TX_ITEM_TYPE_OUT: l_value_256 = GET_256_FROM_64(l_out_item->header.value); break;
-                case TX_ITEM_TYPE_256_OUT_EXT: l_value_256 = l_out_item_ext->header.value_256; break; // _256
-                case TX_ITEM_TYPE_OUT_EXT: l_value_256 = GET_256_FROM_64(l_out_item_ext->header.value); break;
-                default:
-                    log_it(L_DEBUG, "Unknown item type %d", l_type);
-                    break;
-            }
-
-            // l_value = (l_type == TX_ITEM_TYPE_OUT || l_type == TX_ITEM_TYPE_256_OUT) ? l_out_item->header.value : l_out_item_ext->header.value;
             if(s_debug_more)
-                log_it (L_DEBUG,"GOT %s to addr: %s", dap_chain_u256tostr(l_value_256), l_wallet_balance_key);
+                log_it (L_DEBUG,"GOT %"DAP_UINT64_FORMAT_U" to addr: %s", l_value, l_wallet_balance_key);
             pthread_rwlock_rdlock(&l_ledger_priv->balance_accounts_rwlock);
             HASH_FIND_STR(PVT(a_ledger)->balance_accounts, l_wallet_balance_key, wallet_balance);
             pthread_rwlock_unlock(&l_ledger_priv->balance_accounts_rwlock);
             if (wallet_balance) {
                 if(s_debug_more)
                     log_it(L_DEBUG, "Balance item is present in cache");
-
-                SUM_256_256(wallet_balance->balance, l_value_256, &wallet_balance->balance);
+                uint128_t l_add = dap_chain_uint128_from(l_value);
+                wallet_balance->balance = dap_uint128_add(wallet_balance->balance, l_add);
                 DAP_DELETE (l_wallet_balance_key);
                 // Update the cache
                 s_balance_cache_update(a_ledger, wallet_balance);
@@ -2578,9 +2349,8 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx,
                 wallet_balance = DAP_NEW_Z(dap_ledger_wallet_balance_t);
                 wallet_balance->key = l_wallet_balance_key;
                 strcpy(wallet_balance->token_ticker, l_token_ticker);
-
-                SUM_256_256(wallet_balance->balance, l_value_256, &wallet_balance->balance);
-                
+                uint128_t l_add = dap_chain_uint128_from(l_value);
+                wallet_balance->balance = dap_uint128_add(wallet_balance->balance, l_add);
                 if(s_debug_more)
                     log_it(L_DEBUG,"!!! Create new balance item: %s %s", l_addr_str, l_token_ticker);
                 pthread_rwlock_wrlock(&l_ledger_priv->balance_accounts_rwlock);
@@ -2626,13 +2396,9 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx,
             //if ( l_tokens_count>0 ){
                 //dap_chain_tx_token_t * l_token = (dap_chain_tx_token_t*) l_tokens_list->data;
             dap_chain_tx_token_t *l_token = (dap_chain_tx_token_t *)dap_chain_datum_tx_item_get(a_tx, NULL, TX_ITEM_TYPE_TOKEN, NULL);
-            // 256
-            dap_chain_tx_token_t *l_token_256 = (dap_chain_tx_token_t *)dap_chain_datum_tx_item_get(a_tx, NULL, TX_ITEM_TYPE_256_TOKEN, NULL);
             l_ticker_trl = l_token
                     ? dap_stpcpy(l_token_ticker, l_token->header.ticker)
-                    : ( l_token_256 // 256
-                            ? dap_stpcpy(l_token_ticker, l_token_256->header.ticker) 
-                            : NULL );
+                    : NULL;
                 //dap_list_free(l_tokens_list);
             //}
         }
@@ -2871,17 +2637,14 @@ bool dap_chain_ledger_tx_hash_is_used_out_item(dap_ledger_t *a_ledger, dap_chain
  * Calculate balance of addr
  *
  */
-uint256_t dap_chain_ledger_calc_balance(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr,
+uint128_t dap_chain_ledger_calc_balance(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr,
                                         const char *a_token_ticker)
 {
-// #ifdef DAP_GLOBAL_IS_INT128
-//     uint128_t l_ret = 0;
-// #else
-//     uint128_t l_ret = {};
-// #endif
-    //uint128_t l_ret = uint128_0;
-    uint256_t l_ret = uint256_0;
-
+#ifdef DAP_GLOBAL_IS_INT128
+    uint128_t l_ret = 0;
+#else
+    uint128_t l_ret = {};
+#endif
     dap_ledger_wallet_balance_t *l_balance_item = NULL;// ,* l_balance_item_tmp = NULL;
     char *l_addr = dap_chain_addr_to_str(a_addr);
     char *l_wallet_balance_key = dap_strjoin(" ", l_addr, a_token_ticker, (char*)NULL);
@@ -2890,8 +2653,8 @@ uint256_t dap_chain_ledger_calc_balance(dap_ledger_t *a_ledger, const dap_chain_
     pthread_rwlock_unlock(&PVT(a_ledger)->balance_accounts_rwlock);
     if (l_balance_item) {
         if(s_debug_more)
-            log_it (L_INFO,"Found address in cache with balance %s",
-                            dap_chain_u256tostr(l_balance_item->balance));
+            log_it (L_INFO,"Found address in cache with balance %"DAP_UINT64_FORMAT_U"",
+                            dap_chain_uint128_to(l_balance_item->balance));
         l_ret = l_balance_item->balance;
     } else {
         if (s_debug_more)
@@ -2902,17 +2665,14 @@ uint256_t dap_chain_ledger_calc_balance(dap_ledger_t *a_ledger, const dap_chain_
     return l_ret;
 }
 
-uint256_t dap_chain_ledger_calc_balance_full(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr,
+uint128_t dap_chain_ledger_calc_balance_full(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr,
                                              const char *a_token_ticker)
 {
-// #ifdef DAP_GLOBAL_IS_INT128
-//     uint128_t balance = 0;
-// #else
-//     uint128_t balance = {0};
-// #endif
-    //uint128_t balance = uint128_0;
-    uint256_t balance = uint256_0;
-
+#ifdef DAP_GLOBAL_IS_INT128
+    uint128_t balance = 0;
+#else
+    uint128_t balance = {0};
+#endif
     if(!a_addr || !dap_chain_addr_check_sum(a_addr))
         return balance;
     /* proto
@@ -2941,8 +2701,7 @@ uint256_t dap_chain_ledger_calc_balance_full(dap_ledger_t *a_ledger, const dap_c
             if(s_debug_more)
                 log_it(L_ERROR, "Too many 'out' items=%d in transaction (max=%d)", l_out_item_count, MAX_OUT_ITEMS);
             if (l_out_item_count >= MAX_OUT_ITEMS){
-                // uint128_t l_ret;
-                uint256_t l_ret = uint256_0;
+                uint128_t l_ret;
                 memset(&l_ret,0,sizeof(l_ret));
                 return l_ret;
             }
@@ -2963,25 +2722,9 @@ uint256_t dap_chain_ledger_calc_balance_full(dap_ledger_t *a_ledger, const dap_c
                         // if 'out' item not used & transaction is valid
                         if(!dap_chain_ledger_item_is_used_out(l_iter_current, l_out_idx_tmp) &&
                                 dap_chain_datum_tx_verify_sign(l_cur_tx)) {
-                            // uint128_t l_add = dap_chain_uint128_from(l_tx_out->header.value);
-                            // balance = dap_uint128_add(balance, l_add);
-                            uint256_t l_add = dap_chain_uint256_from(l_tx_out->header.value);
-                            SUM_256_256(balance, l_add, &balance);
-                        }
-                    }
-                }
-            }
-            if (l_type == TX_ITEM_TYPE_256_OUT) { // 256
-                //const dap_chain_256_tx_out_t *l_tx_out = (const dap_chain_256_tx_out_t*) l_list_tmp->data;
-                const dap_chain_tx_out_t *l_tx_out = (const dap_chain_tx_out_t*) l_list_tmp->data;
-                // Check for token name
-                if (!strcmp(a_token_ticker, l_iter_current->cache_data.token_tiker))
-                {   // if transaction has the out item with requested addr
-                    if (!memcmp(a_addr, &l_tx_out->addr, sizeof(dap_chain_addr_t))) {
-                        // if 'out' item not used & transaction is valid
-                        if(!dap_chain_ledger_item_is_used_out(l_iter_current, l_out_idx_tmp) &&
-                                dap_chain_datum_tx_verify_sign(l_cur_tx)) {
-                            SUM_256_256(balance, l_tx_out->header.value_256, &balance);
+
+                            uint128_t l_add = dap_chain_uint128_from(l_tx_out->header.value);
+                            balance = dap_uint128_add(balance, l_add);
                         }
                     }
                 }
@@ -2995,23 +2738,8 @@ uint256_t dap_chain_ledger_calc_balance_full(dap_ledger_t *a_ledger, const dap_c
                         // if 'out' item not used & transaction is valid
                         if(!dap_chain_ledger_item_is_used_out(l_iter_current, l_out_idx_tmp) &&
                                 dap_chain_datum_tx_verify_sign(l_cur_tx)) {
-                            uint256_t l_add = dap_chain_uint256_from(l_tx_out->header.value);
-                            SUM_256_256(balance, l_add, &balance);
-                        }
-                    }
-                }
-            }
-            if (l_type == TX_ITEM_TYPE_256_OUT_EXT) { // 256
-                // const dap_chain_256_tx_out_ext_t *l_tx_out = (const dap_chain_256_tx_out_ext_t*) l_list_tmp->data;
-                const dap_chain_tx_out_ext_t *l_tx_out = (const dap_chain_tx_out_ext_t*) l_list_tmp->data;
-                // Check for token name
-                if (!strcmp(a_token_ticker, l_tx_out->token))
-                {   // if transaction has the out item with requested addr
-                    if (!memcmp(a_addr, &l_tx_out->addr, sizeof(dap_chain_addr_t))) {
-                        // if 'out' item not used & transaction is valid
-                        if(!dap_chain_ledger_item_is_used_out(l_iter_current, l_out_idx_tmp) &&
-                                dap_chain_datum_tx_verify_sign(l_cur_tx)) {
-                            SUM_256_256(balance, l_tx_out->header.value_256, &balance);
+                            uint128_t l_add = dap_chain_uint128_from(l_tx_out->header.value);
+                            balance = dap_uint128_add(balance, l_add);
                         }
                     }
                 }
@@ -3273,7 +3001,6 @@ dap_list_t *dap_chain_ledger_get_list_tx_outs_with_val(dap_ledger_t *a_ledger, c
     dap_list_t *l_list_used_out = NULL; // list of transaction with 'out' items
     dap_chain_hash_fast_t l_tx_cur_hash = { 0 };
     uint64_t l_value_transfer = 0;
-    //uint256_t l_value_transfer = uint256_0;
     while(l_value_transfer < a_value_need)
     {
         // Get the transaction in the cache by the addr in out item
@@ -3287,70 +3014,34 @@ 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;
-            if (l_type == TX_ITEM_TYPE_OUT_COND || l_type == TX_ITEM_TYPE_256_OUT_COND) {
+            if (l_type == TX_ITEM_TYPE_OUT_COND) {
                 continue;
             }
-            // uint64_t l_value;
-            uint256_t l_value = uint256_0;
-            switch (l_type) {
-                case TX_ITEM_TYPE_OUT: {
-                    dap_chain_tx_out_t *l_out = (dap_chain_tx_out_t *)l_list_tmp->data;
-                    if (!l_out->header.value || memcmp(a_addr_from, &l_out->addr, sizeof(dap_chain_addr_t))) {
-                        continue;
-                    }
-                    l_value = GET_256_FROM_64(l_out->header.value);   
-                } break;
-                case TX_ITEM_TYPE_256_OUT: {
-                    dap_chain_tx_out_t *l_out = (dap_chain_tx_out_t *)l_list_tmp->data;
-                    if ( IS_ZERO_256(l_out->header.value_256) || memcmp(a_addr_from, &l_out->addr, sizeof(dap_chain_addr_t))) {
-                        continue;
-                    }
-                    l_value = l_out->header.value_256;   
-                } break;
-                case TX_ITEM_TYPE_OUT_EXT: {
-                    dap_chain_tx_out_ext_t *l_out_ext = (dap_chain_tx_out_ext_t *)l_list_tmp->data;
-                    if (!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;
-                    }
-                    l_value = GET_256_FROM_64(l_out_ext->header.value);
-                } break;
-                case TX_ITEM_TYPE_256_OUT_EXT: {
-                    dap_chain_tx_out_ext_t *l_out_ext = (dap_chain_tx_out_ext_t *)l_list_tmp->data;
-                    if ( IS_ZERO_256(l_out_ext->header.value_256) || memcmp(a_addr_from, &l_out_ext->addr, sizeof(dap_chain_addr_t)) ||
-                            strcmp((char *)a_token_ticker, l_out_ext->token)) {
-                        continue;
-                    }
-                    l_value = l_out_ext->header.value_256;
-                } break;
+            uint64_t l_value;
+            if (l_type == TX_ITEM_TYPE_OUT) {
+                dap_chain_tx_out_t *l_out = (dap_chain_tx_out_t *)l_list_tmp->data;
+                if (!l_out->header.value || memcmp(a_addr_from, &l_out->addr, sizeof(dap_chain_addr_t))) {
+                    continue;
+                }
+                l_value =  l_out->header.value;
+            } else { // TX_ITEM_TYPE_OUT_EXT
+                dap_chain_tx_out_ext_t *l_out_ext = (dap_chain_tx_out_ext_t *)l_list_tmp->data;
+                if (!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;
+                }
+                l_value =  l_out_ext->header.value;
             }
-            // if (l_type == TX_ITEM_TYPE_OUT) {
-            //     dap_chain_tx_out_t *l_out = (dap_chain_tx_out_t *)l_list_tmp->data;
-            //     if (!l_out->header.value || memcmp(a_addr_from, &l_out->addr, sizeof(dap_chain_addr_t))) {
-            //         continue;
-            //     }
-            //     l_value =  l_out->header.value;
-            // } else { // TX_ITEM_TYPE_OUT_EXT
-            //     dap_chain_tx_out_ext_t *l_out_ext = (dap_chain_tx_out_ext_t *)l_list_tmp->data;
-            //     if (!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;
-            //     }
-            //     l_value =  l_out_ext->header.value;
-            // }
             // 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);
                 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 = dap_chain_uint256_to(l_value); // this is temporary for compatibility :-)
+                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, 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) >= 0) {
                     break;
                 }
             }
@@ -3360,7 +3051,6 @@ dap_list_t *dap_chain_ledger_get_list_tx_outs_with_val(dap_ledger_t *a_ledger, c
 
     // nothing to tranfer (not enough funds)
     if(!l_list_used_out || l_value_transfer < a_value_need) {
-    // if(!l_list_used_out || compare256(l_value_transfer, a_value_need) < 0) {
         dap_list_free_full(l_list_used_out, free);
         return NULL;
     }
diff --git a/modules/chain/include/dap_chain.h b/modules/chain/include/dap_chain.h
index 8f655b747d01d5031eedace2baa99f1b2f16673b..5d6de24f6666dfe727b6770e097da2ac02b0669a 100644
--- a/modules/chain/include/dap_chain.h
+++ b/modules/chain/include/dap_chain.h
@@ -47,7 +47,6 @@ typedef struct dap_chain_atom_iter{
     dap_chain_t * chain;
     dap_chain_atom_ptr_t cur;
     dap_chain_hash_fast_t *cur_hash;
-    dap_chain_cell_id_t cell_id;
     size_t cur_size;
     void * cur_item;
     void * _inheritor;
@@ -71,7 +70,7 @@ typedef dap_chain_atom_ptr_t (*dap_chain_callback_atom_form_treshold_t)(dap_chai
 typedef dap_chain_atom_verify_res_t (*dap_chain_callback_atom_verify_t)(dap_chain_t *, dap_chain_atom_ptr_t , size_t);
 typedef size_t (*dap_chain_callback_atom_get_hdr_size_t)(void);
 
-typedef dap_chain_atom_iter_t* (*dap_chain_callback_atom_iter_create_t)(dap_chain_t *, dap_chain_cell_id_t);
+typedef dap_chain_atom_iter_t* (*dap_chain_callback_atom_iter_create_t)(dap_chain_t * );
 typedef dap_chain_atom_iter_t* (*dap_chain_callback_atom_iter_create_from_t)(dap_chain_t * ,dap_chain_atom_ptr_t, size_t);
 typedef dap_chain_atom_ptr_t (*dap_chain_callback_atom_iter_get_first_t)(dap_chain_atom_iter_t * , size_t*);
 typedef dap_chain_datum_t** (*dap_chain_callback_atom_get_datum_t)(dap_chain_atom_ptr_t, size_t, size_t * );
@@ -93,9 +92,7 @@ typedef  enum dap_chain_type
     CHAIN_TYPE_FIRST,
     CHAIN_TYPE_TOKEN,
     CHAIN_TYPE_EMISSION,
-    CHAIN_TYPE_256_EMISSION, // 256
     CHAIN_TYPE_TX,
-    CHAIN_TYPE_256_TX, // 256
     CHAIN_TYPE_CA,
     CHAIN_TYPE_LAST
 } dap_chain_type_t;
@@ -185,5 +182,5 @@ 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, dap_chain_cell_id_t a_cell_id);
-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_cell_id);
+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);
diff --git a/modules/chain/include/dap_chain_ledger.h b/modules/chain/include/dap_chain_ledger.h
index aa8fc05e8c91ed891fd549652f3caf7af90f4998..524d3bc49bb722df1817799653c5e871bb6c55b3 100644
--- a/modules/chain/include/dap_chain_ledger.h
+++ b/modules/chain/include/dap_chain_ledger.h
@@ -127,7 +127,6 @@ dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger);
 /**
  * Add token emission datum
  */
-
 int dap_chain_ledger_token_emission_add(dap_ledger_t *a_ledger, byte_t *a_token_emission, size_t a_token_emission_size);
 int dap_chain_ledger_token_emission_load(dap_ledger_t *a_ledger, byte_t *a_token_emission, size_t a_token_emission_size);
 
@@ -178,10 +177,10 @@ bool dap_chain_ledger_tx_hash_is_used_out_item(dap_ledger_t *a_ledger, dap_chain
  * Calculate balance of addr
  *
  */
-uint256_t dap_chain_ledger_calc_balance(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr,
+uint128_t dap_chain_ledger_calc_balance(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr,
         const char *a_token_ticker);
 
-uint256_t dap_chain_ledger_calc_balance_full(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr,
+uint128_t dap_chain_ledger_calc_balance_full(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr,
             const char *a_token_ticker);
 
 /**
diff --git a/modules/channel/chain-net-srv/CMakeLists.txt b/modules/channel/chain-net-srv/CMakeLists.txt
index 99175488200aa2962f42c06c1e8628b57a8731b2..5b511f0528c7cf6bc52c5139b7f2fe72464d2458 100644
--- a/modules/channel/chain-net-srv/CMakeLists.txt
+++ b/modules/channel/chain-net-srv/CMakeLists.txt
@@ -6,7 +6,7 @@ file(GLOB DAP_STREAM_CH_CHAIN_NET_SRV_HDRS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_STREAM_CH_CHAIN_NET_SRV_SRCS} ${DAP_STREAM_CH_CHAIN_NET_SRV_HDRS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain_common dap_chain dap_chain_mempool dap_chain_net dap_chain_net_srv dap_server_core dap_stream dap_stream_ch dap_stream_ch_chain dap_stream_ch_chain_net)
+target_link_libraries(dap_stream_ch_chain_net_srv dap_core dap_crypto dap_chain_common dap_chain dap_chain_mempool dap_chain_net dap_chain_net_srv dap_server_core dap_stream dap_stream_ch dap_stream_ch_chain dap_stream_ch_chain_net)
 
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_include_directories(dap_stream_ch_chain_net_srv INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
diff --git a/modules/channel/chain-net/CMakeLists.txt b/modules/channel/chain-net/CMakeLists.txt
index c7166b01ad46da9f45d0921c93ecac3a75e952af..90b038e903c5cc5eb25487fbe19ba0d5ba7c1861 100644
--- a/modules/channel/chain-net/CMakeLists.txt
+++ b/modules/channel/chain-net/CMakeLists.txt
@@ -6,9 +6,9 @@ file(GLOB DAP_STREAM_CH_CHAIN_NET_HDRS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_STREAM_CH_CHAIN_NET_SRCS} ${DAP_STREAM_CH_CHAIN_NET_HDRS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_stream dap_stream_ch dap_stream_ch_chain
+target_link_libraries(dap_stream_ch_chain_net dap_core dap_crypto dap_stream dap_stream_ch dap_stream_ch_chain
                                                dap_chain_net)
 
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_include_directories(dap_stream_ch_chain_net INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
 target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../3rdparty/uthash/src)
diff --git a/modules/channel/chain-net/dap_stream_ch_chain_net.c b/modules/channel/chain-net/dap_stream_ch_chain_net.c
index 26ad6039af414d7ecac28bf899e8c6c095ddad43..c54f1ae14aa4f12b7c27117565461b329b8e8736 100644
--- a/modules/channel/chain-net/dap_stream_ch_chain_net.c
+++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c
@@ -299,7 +299,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
                                                           l_err_str,sizeof (l_err_str));
                         dap_stream_ch_set_ready_to_write_unsafe(a_ch, true);
                     } else {
-                        dap_chain_node_addr_t *l_addr_new = dap_chain_node_gen_addr(l_ch_chain_net_pkt->hdr.net_id);
+                        dap_chain_node_addr_t *l_addr_new = dap_chain_node_gen_addr(l_net, &l_net->pub.cell_id );
                         dap_stream_ch_chain_net_pkt_write(a_ch, DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_ADDR_LEASE ,
                                                          l_ch_chain_net_pkt->hdr.net_id, l_addr_new, sizeof (*l_addr_new));
                         dap_stream_ch_set_ready_to_write_unsafe(a_ch, true);
diff --git a/modules/channel/chain/CMakeLists.txt b/modules/channel/chain/CMakeLists.txt
index e5a850a5c789c625579eae5b7a10a7b34a78f699..048805b30881b55e65ca563fe723cdeb1c492d6c 100644
--- a/modules/channel/chain/CMakeLists.txt
+++ b/modules/channel/chain/CMakeLists.txt
@@ -6,8 +6,8 @@ file(GLOB DAP_STREAM_CH_CHAIN_HDRS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_STREAM_CH_CHAIN_SRCS} ${DAP_STREAM_CH_CHAIN_HDRS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_stream dap_stream_ch)
+target_link_libraries(dap_stream_ch_chain dap_core dap_crypto dap_chain dap_stream dap_stream_ch)
 
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_include_directories(dap_stream_ch_chain INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
 target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../3rdparty/uthash/src)
diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c
index 006c0cbc372571a976aabc7167a90de6b342fdde..85bcc06fe19016aafcf0adff7d61d053a83d17e8 100644
--- a/modules/channel/chain/dap_stream_ch_chain.c
+++ b/modules/channel/chain/dap_stream_ch_chain.c
@@ -288,7 +288,7 @@ static bool s_sync_out_chains_proc_callback(dap_proc_thread_t *a_thread, void *a
     dap_chain_t * l_chain = dap_chain_find_by_id(l_sync_request->request_hdr.net_id, l_sync_request->request_hdr.chain_id);
     assert(l_chain);
     //pthread_rwlock_rdlock(&l_chain->atoms_rwlock);
-    l_sync_request->chain.request_atom_iter = l_chain->callback_atom_iter_create(l_chain, l_sync_request->request_hdr.cell_id);
+    l_sync_request->chain.request_atom_iter = l_chain->callback_atom_iter_create(l_chain);
     size_t l_first_size = 0;
     dap_chain_atom_ptr_t l_iter = l_chain->callback_atom_iter_get_first(l_sync_request->chain.request_atom_iter, &l_first_size);
     if (l_iter && l_first_size) {
@@ -478,7 +478,7 @@ static bool s_sync_in_chains_callback(dap_proc_thread_t *a_thread, void *a_arg)
     uint64_t l_atom_copy_size = l_pkt_item->pkt_data_size;
     dap_hash_fast(l_atom_copy, l_atom_copy_size, &l_atom_hash);
     size_t l_atom_size = 0;
-    if (dap_chain_get_atom_by_hash(l_chain, &l_atom_hash, &l_atom_size, l_sync_request->request_hdr.cell_id)) {
+    if (dap_chain_get_atom_by_hash(l_chain, &l_atom_hash, &l_atom_size)) {
         if (s_debug_more){
             char l_atom_hash_str[72] = {'\0'};
             dap_chain_hash_fast_to_str(&l_atom_hash,l_atom_hash_str,sizeof (l_atom_hash_str)-1 );
@@ -1035,7 +1035,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
                 if(s_debug_more)
                     log_it(L_INFO, "Out: UPDATE_CHAINS_START pkt: net %s chain %s cell 0x%016"DAP_UINT64_FORMAT_X, l_chain->name,
                                         l_chain->net_name, l_chain_pkt->hdr.cell_id.uint64);
-                l_ch_chain->request_atom_iter = l_chain->callback_atom_iter_create(l_chain, l_chain_pkt->hdr.cell_id);
+                l_ch_chain->request_atom_iter = l_chain->callback_atom_iter_create(l_chain);
                 l_chain->callback_atom_iter_get_first(l_ch_chain->request_atom_iter, NULL);
                 memcpy(&l_ch_chain->request_hdr, &l_chain_pkt->hdr, sizeof(dap_stream_ch_chain_pkt_hdr_t));
                 dap_stream_ch_chain_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_PKT_TYPE_UPDATE_CHAINS_START,
@@ -1276,7 +1276,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, l_chain_pkt->hdr.cell_id); // Move away from i/o reactor to callback processor
+                    dap_chain_get_atom_last_hash(l_chain,& l_request.hash_from); // 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/CMakeLists.txt b/modules/common/CMakeLists.txt
index 7689148fe4e70b39da308ebeb5a88cb3f1bc875b..1a4670336869329ba4f7dff0936354b4ad674119 100644
--- a/modules/common/CMakeLists.txt
+++ b/modules/common/CMakeLists.txt
@@ -6,5 +6,5 @@ file(GLOB DAP_CHAIN_COMMON_HEADERS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_COMMON_SRCS} ${DAP_CHAIN_COMMON_HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto )
-target_include_directories(${PROJECT_NAME} PUBLIC include/ )
+target_link_libraries(dap_chain_common dap_core dap_crypto )
+target_include_directories(dap_chain_common PUBLIC include/ )
diff --git a/modules/common/dap_chain_common.c b/modules/common/dap_chain_common.c
index 8b6c329fa58bc9e1af94ac13dfb6ee1364ca94d8..3189c9ec51e390b3fe0ae5c596c51b256626d4df 100644
--- a/modules/common/dap_chain_common.c
+++ b/modules/common/dap_chain_common.c
@@ -282,15 +282,6 @@ int dap_chain_addr_check_sum(const dap_chain_addr_t *a_addr)
     return -1;
 }
 
-// 256
-uint128_t dap_chain_uint128_from_uint256(uint256_t a_from)
-{
-    if ( !( EQUAL_128(a_from.hi, uint128_0) ) ) {
-        log_it(L_ERROR, "Can't convert to uint128_t. It's too big.");
-    }
-    return a_from.lo;
-}
-
 uint64_t dap_chain_uint128_to(uint128_t a_from)
 {
 #ifdef DAP_GLOBAL_IS_INT128
@@ -306,20 +297,6 @@ uint64_t dap_chain_uint128_to(uint128_t a_from)
 #endif
 }
 
-// 256
-uint64_t dap_chain_uint256_to(uint256_t a_from)
-{
-    return dap_chain_uint128_to(a_from.lo);
-}
-
-// for tests
-char *dap_chain_u256tostr(uint256_t v_256)
-{
-    char *dest = malloc(130 * sizeof(char));
-    return strcpy(dest, dap_utoa128((char[130]){}, dap_chain_uint128_from_uint256(v_256), 10));
-}
-
-
 char *dap_chain_balance_print(uint128_t a_balance)
 {
     char *l_buf = DAP_NEW_Z_SIZE(char, DATOSHI_POW + 3);
@@ -444,29 +421,25 @@ uint128_t dap_chain_balance_scan(char *a_balance)
             return l_nul;
         }
         l_tmp = (l_tmp << 64) + c_pow10[i].u64[1] * l_digit;
-        // l_ret = dap_uint128_add(l_ret, l_tmp);
-        SUM_128_128(l_ret, l_tmp, &l_ret);
+        l_ret = dap_uint128_add(l_ret, l_tmp);
         if (l_ret == l_nul)
             return l_nul;
 #else
         uint128_t l_tmp;
         l_tmp.u64[0] = 0;
         l_tmp.u64[1] = c_pow10[i].u32[2] * l_digit;
-        // l_ret = dap_uint128_add(l_ret, l_tmp);
-        SUM_128_128(l_ret, l_tmp, &l_ret);
+        l_ret = dap_uint128_add(l_ret, l_tmp);
         if (l_ret.u64[0] == 0 && l_ret.u64[1] == 0)
             return l_nul;
         uint64_t l_mul = c_pow10[i].u32[3] * l_digit;
         l_tmp.u64[1] = l_mul << 32;
         l_tmp.u64[0] = l_mul >> 32;
-        // l_ret = dap_uint128_add(l_ret, l_tmp);
-        SUM_128_128(l_ret, l_tmp, &l_ret);
+        l_ret = dap_uint128_add(l_ret, l_tmp);
         if (l_ret.u64[0] == 0 && l_ret.u64[1] == 0)
             return l_nul;
         l_tmp.u64[1] = 0;
         l_tmp.u64[0] = c_pow10[i].u32[0] * l_digit;
-        //l_ret = dap_uint128_add(l_ret, l_tmp);
-        SUM_128_128(l_ret, l_tmp, &l_ret);
+        l_ret = dap_uint128_add(l_ret, l_tmp);
         if (l_ret.u64[0] == 0 && l_ret.u64[1] == 0)
             return l_nul;
         l_mul = c_pow10[i].u32[1] * l_digit;
@@ -475,8 +448,7 @@ uint128_t dap_chain_balance_scan(char *a_balance)
             return l_nul;
         }
         l_tmp.u64[0] = l_mul << 32;
-        //l_ret = dap_uint128_add(l_ret, l_tmp);
-        SUM_128_128(l_ret, l_tmp, &l_ret);
+        l_ret = dap_uint128_add(l_ret, l_tmp);
         if (l_ret.u64[0] == 0 && l_ret.u64[1] == 0)
             return l_nul;
 #endif
diff --git a/modules/common/dap_chain_datum_tx.c b/modules/common/dap_chain_datum_tx.c
index 7c91336dfcea560008144827508c0f777504426c..6f48ec58ed6d1381985539588f87b58674f7a536 100644
--- a/modules/common/dap_chain_datum_tx.c
+++ b/modules/common/dap_chain_datum_tx.c
@@ -118,27 +118,6 @@ uint64_t dap_chain_datum_tx_add_in_item_list(dap_chain_datum_tx_t **a_tx, dap_li
     return l_value_to_items;
 }
 
-// 256
-uint256_t dap_chain_datum_256_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;
-    uint256_t l_value_to_items = uint256_0; // how many datoshi to transfer
-    while (l_list_tmp) {
-        list_used_item_256_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;
-            int overflow_flag = SUM_256_256(l_value_to_items, item->value, &l_value_to_items);
-            if ( overflow_flag > 0 ) {
-                log_it(L_ERROR,"overflow sum 256 256");
-            }
-
-        }
-        l_list_tmp = dap_list_next(l_list_tmp);
-    }
-    return l_value_to_items;
-}
-
-
 
 /**
  * @brief dap_chain_datum_tx_add_in_cond_item
@@ -179,18 +158,6 @@ int dap_chain_datum_tx_add_out_item(dap_chain_datum_tx_t **a_tx, const dap_chain
     return -1;
 }
 
-// 256
-int dap_chain_datum_256_tx_add_out_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr, uint256_t a_value)
-{
-    dap_chain_tx_out_t *l_tx_out = dap_chain_datum_tx_item_256_out_create(a_addr, a_value);
-    if(l_tx_out) {
-        dap_chain_datum_tx_add_item(a_tx, (const uint8_t *)l_tx_out);
-        DAP_DELETE(l_tx_out);
-        return 1;
-    }
-    return -1;
-}
-
 /**
  * Create 'out_ext' item and insert to transaction
  *
@@ -207,17 +174,6 @@ int dap_chain_datum_tx_add_out_ext_item(dap_chain_datum_tx_t **a_tx, const dap_c
     return -1;
 }
 
-// 256
-int dap_chain_datum_256_tx_add_out_ext_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr, uint256_t a_value, const char *a_token)
-{
-    dap_chain_tx_out_ext_t *l_tx_out = dap_chain_datum_tx_item_256_out_ext_create(a_addr, a_value, a_token);
-    if(l_tx_out) {
-        dap_chain_datum_tx_add_item(a_tx, (const uint8_t *)l_tx_out);
-        DAP_DELETE(l_tx_out);
-        return 1;
-    }
-    return -1;
-}
 /**
  * Create 'out_cond' item and insert to transaction
  *
@@ -236,21 +192,6 @@ int dap_chain_datum_tx_add_out_cond_item(dap_chain_datum_tx_t **a_tx, dap_enc_ke
     return -1;
 }
 
-// 256
-int dap_chain_datum_256_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_tx_out_cond_t *l_tx_out = dap_chain_datum_tx_item_256_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);
-        DAP_DELETE(l_tx_out);
-        return 1;
-    }
-    return -1;
-}
-
-
 /**
  * Sign a transaction (Add sign item to transaction)
  *
diff --git a/modules/common/dap_chain_datum_tx_items.c b/modules/common/dap_chain_datum_tx_items.c
index 5648eb92cff4a4b2c54ff49e6c0865487e5f812d..38cde942ce07b84b0891e1316f7e2965674507eb 100644
--- a/modules/common/dap_chain_datum_tx_items.c
+++ b/modules/common/dap_chain_datum_tx_items.c
@@ -58,7 +58,6 @@ static size_t dap_chain_tx_out_get_size(const dap_chain_tx_out_t *a_item)
     return size;
 }
 
-
 static size_t dap_chain_tx_out_ext_get_size(const dap_chain_tx_out_ext_t *a_item)
 {
     (void) a_item;
@@ -66,7 +65,6 @@ static size_t dap_chain_tx_out_ext_get_size(const dap_chain_tx_out_ext_t *a_item
     return size;
 }
 
-
 static size_t dap_chain_tx_out_cond_get_size(const dap_chain_tx_out_cond_t *a_item)
 {
     return sizeof(dap_chain_tx_out_cond_t) + a_item->params_size;
@@ -119,30 +117,17 @@ size_t dap_chain_datum_item_tx_get_size(const uint8_t *a_item)
     case TX_ITEM_TYPE_OUT: // Transaction outputs
         size = dap_chain_tx_out_get_size((const dap_chain_tx_out_t*) a_item);
         break;
-    case TX_ITEM_TYPE_256_OUT: // 256
-        size = dap_chain_tx_out_get_size((const dap_chain_tx_out_t*) a_item);
-        break;
     case TX_ITEM_TYPE_OUT_EXT:
         size = dap_chain_tx_out_ext_get_size((const dap_chain_tx_out_ext_t*) a_item);
         break;
-    case TX_ITEM_TYPE_256_OUT_EXT: // 256
-        size = dap_chain_tx_out_ext_get_size((const dap_chain_tx_out_ext_t*) a_item);
-        break;
     case TX_ITEM_TYPE_RECEIPT: // Receipt
         size = dap_chain_datum_tx_receipt_get_size((const dap_chain_datum_tx_receipt_t*) a_item);
-        break; 
-    case TX_ITEM_TYPE_256_RECEIPT: // 256
-        size = dap_chain_datum_tx_receipt_get_size((const dap_chain_datum_tx_receipt_t*) a_item);
-        break; 
     case TX_ITEM_TYPE_IN_COND: // Transaction inputs with condition
         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);
         break;
-    case TX_ITEM_TYPE_256_OUT_COND: // 256
-        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);
         break;
@@ -152,9 +137,6 @@ size_t dap_chain_datum_item_tx_get_size(const uint8_t *a_item)
     case TX_ITEM_TYPE_TOKEN: // token item
         size = dap_chain_tx_token_get_size((const dap_chain_tx_token_t*) a_item);
         break;
-    case TX_ITEM_TYPE_256_TOKEN: // token item
-        size = dap_chain_tx_token_get_size((const dap_chain_tx_token_t*) a_item);
-        break;
     default:
         return 0;
     }
@@ -176,17 +158,6 @@ dap_chain_tx_token_t* dap_chain_datum_tx_item_token_create(dap_chain_hash_fast_t
     strncpy(l_item->header.ticker, a_ticker, sizeof(l_item->header.ticker) - 1);
     return l_item;
 }
-// 256
-dap_chain_tx_token_t* dap_chain_datum_tx_item_256_token_create(dap_chain_hash_fast_t * a_datum_token_hash,const char * a_ticker)
-{
-    if(!a_ticker)
-        return NULL;
-    dap_chain_tx_token_t *l_item = DAP_NEW_Z(dap_chain_tx_token_t);
-    l_item->header.type = TX_ITEM_TYPE_256_TOKEN;
-    memcpy (& l_item->header.token_emission_hash, a_datum_token_hash, sizeof ( *a_datum_token_hash ) );
-    strncpy(l_item->header.ticker, a_ticker, sizeof(l_item->header.ticker) - 1);
-    return l_item;
-}
 
 /**
  * Create item dap_chain_tx_out_t
@@ -240,18 +211,6 @@ dap_chain_tx_out_t* dap_chain_datum_tx_item_out_create(const dap_chain_addr_t *a
     return l_item;
 }
 
-//256
-dap_chain_tx_out_t* dap_chain_datum_tx_item_256_out_create(const dap_chain_addr_t *a_addr, uint256_t a_value)
-{
-    if(!a_addr)
-        return NULL;
-    dap_chain_tx_out_t *l_item = DAP_NEW_Z(dap_chain_tx_out_t);
-    l_item->header.type = TX_ITEM_TYPE_256_OUT;
-    l_item->header.value_256 = a_value;
-    memcpy(&l_item->addr, a_addr, sizeof(dap_chain_addr_t));
-    return l_item;
-}
-
 dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_chain_addr_t *a_addr, uint64_t a_value, const char *a_token)
 {
     if (!a_addr || !a_token)
@@ -264,20 +223,6 @@ dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_chain_a
     return l_item;
 }
 
-//256
-dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_256_out_ext_create(const dap_chain_addr_t *a_addr, uint256_t a_value, const char *a_token)
-{
-    if (!a_addr || !a_token)
-        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_256_OUT_EXT;
-    l_item->header.value_256 = a_value;
-    memcpy(&l_item->addr, a_addr, sizeof(dap_chain_addr_t));
-    strcpy(l_item->token, a_token);
-    return l_item;
-}
-
-
 /**
  * Create item dap_chain_tx_out_cond_t
  *
@@ -309,34 +254,6 @@ dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap_enc
     return l_item;
 }
 
-// 256
-dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_256_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)
-{
-    if(!a_key || !a_params)
-        return NULL;
-    size_t l_pub_key_size = 0;
-    uint8_t *l_pub_key = dap_enc_key_serealize_pub_key(a_key, &l_pub_key_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;
-
-    l_item->header.item_type = TX_ITEM_TYPE_256_OUT_COND;
-    l_item->header.value_256 = a_value;
-    l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY; // By default creatre cond for service pay. Rework with smth more flexible
-    l_item->subtype.srv_pay.srv_uid = a_srv_uid;
-    l_item->subtype.srv_pay.unit = a_unit;
-    l_item->subtype.srv_pay.unit_price_max_datoshi_256 = a_value_max_per_unit;
-    dap_hash_fast( l_pub_key, l_pub_key_size, & l_item->subtype.srv_pay.pkey_hash);
-    l_item->params_size = (uint32_t)a_params_size;
-    memcpy(l_item->params, a_params, a_params_size);
-    return l_item;
-}
-
-
 
 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, uint64_t a_value,
@@ -359,28 +276,6 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap
     return l_item;
 }
 
-// 256
-dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_256_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_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_256 = 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->subtype.srv_xchange.net_id = a_net_id;
-    strcpy(l_item->subtype.srv_xchange.token, a_token);
-    l_item->params_size = a_params_size;
-    if (a_params_size) {
-        memcpy(l_item->params, a_params, a_params_size);
-    }
-    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, uint64_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)
@@ -400,27 +295,6 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake(dap_c
     return l_item;
 }
 
-// 256
-dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_256_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_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_256 = 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->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));
-    l_item->params_size = a_params_size;
-    if (a_params_size) {
-        memcpy(l_item->params, a_params, a_params_size);
-    }
-    return l_item;
-}
-
-
 /**
  * Create item dap_chain_tx_sig_t
  *
@@ -484,11 +358,7 @@ uint8_t* dap_chain_datum_tx_item_get( dap_chain_datum_tx_t *a_tx, int *a_item_id
             if (a_type == TX_ITEM_TYPE_ANY || a_type == l_type ||
                     (a_type == TX_ITEM_TYPE_OUT_ALL && l_type == TX_ITEM_TYPE_OUT) ||
                     (a_type == TX_ITEM_TYPE_OUT_ALL && l_type == TX_ITEM_TYPE_OUT_COND) ||
-                    (a_type == TX_ITEM_TYPE_OUT_ALL && l_type == TX_ITEM_TYPE_OUT_EXT) ||
-                    (a_type == TX_ITEM_TYPE_OUT_ALL && l_type == TX_ITEM_TYPE_256_OUT) ||
-                    (a_type == TX_ITEM_TYPE_OUT_ALL && l_type == TX_ITEM_TYPE_256_OUT_COND) ||
-                    (a_type == TX_ITEM_TYPE_OUT_ALL && l_type == TX_ITEM_TYPE_256_OUT_EXT)
-                ) {
+                    (a_type == TX_ITEM_TYPE_OUT_ALL && l_type == TX_ITEM_TYPE_OUT_EXT)) {
                 if(a_item_idx_start)
                     *a_item_idx_start = l_item_idx;
                 if(a_item_out_size)
@@ -546,24 +416,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_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_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/dap_chain_datum_tx_receipt.c b/modules/common/dap_chain_datum_tx_receipt.c
index 66a4712322fd4b8f769fde168e5bcc57ae2dc96e..d4428f85e57f2032c1b434fb6e0ffae6fafe14b1 100644
--- a/modules/common/dap_chain_datum_tx_receipt.c
+++ b/modules/common/dap_chain_datum_tx_receipt.c
@@ -60,27 +60,6 @@ dap_chain_datum_tx_receipt_t * dap_chain_datum_tx_receipt_create( dap_chain_net_
     return  l_ret;
 }
 
-// 256
-dap_chain_datum_tx_receipt_t * dap_chain_datum_256_tx_receipt_create( dap_chain_net_srv_uid_t a_srv_uid,
-                                                                  dap_chain_net_srv_price_unit_uid_t a_units_type,
-                                                                    uint64_t a_units, uint256_t a_value_datoshi,
-                                                                  const void * a_ext, size_t a_ext_size)
-{
-    dap_chain_datum_tx_receipt_t * l_ret = DAP_NEW_Z_SIZE(dap_chain_datum_tx_receipt_t, dap_chain_datum_tx_receipt_get_size_hdr() +a_ext_size );
-    l_ret->type = TX_ITEM_TYPE_256_RECEIPT;
-    l_ret->receipt_info.units_type = a_units_type;
-    l_ret->receipt_info.srv_uid = a_srv_uid;
-    l_ret->receipt_info.units = a_units;
-    l_ret->receipt_info.value_datoshi_256 = a_value_datoshi;
-    l_ret->size = dap_chain_datum_tx_receipt_get_size_hdr()+a_ext_size;
-
-    if( a_ext_size && a_ext){
-        l_ret->exts_size = a_ext_size;
-        memcpy(l_ret->exts_n_signs, a_ext, a_ext_size);
-    }
-    return  l_ret;
-}
-
 size_t dap_chain_datum_tx_receipt_sign_add(dap_chain_datum_tx_receipt_t ** a_receipt, size_t a_receipt_size, dap_enc_key_t *a_key )
 {
     dap_chain_datum_tx_receipt_t *l_receipt = *a_receipt;
@@ -104,7 +83,6 @@ size_t dap_chain_datum_tx_receipt_sign_add(dap_chain_datum_tx_receipt_t ** a_rec
     return a_receipt_size;
 }
 
-
 /**
  * @brief dap_chain_datum_tx_receipt_sign_get
  * @param l_receipt
@@ -128,7 +106,6 @@ dap_sign_t* dap_chain_datum_tx_receipt_sign_get(dap_chain_datum_tx_receipt_t * l
     return l_sign;
 }
 
-
 /**
  * @brief dap_chain_datum_tx_receipt_signs_count
  * @param a_receipt
diff --git a/modules/common/include/dap_chain_common.h b/modules/common/include/dap_chain_common.h
index 9d6da50b2ebd25edfb8954b852cc9acb49fa174d..2b51b2f672ef12824ba868da6ecdabe97a5242ab 100644
--- a/modules/common/include/dap_chain_common.h
+++ b/modules/common/include/dap_chain_common.h
@@ -191,27 +191,15 @@ typedef union {
 
 enum dap_chain_tx_item_type {
     TX_ITEM_TYPE_IN = 0x00, /// @brief  Transaction: inputs
-
     TX_ITEM_TYPE_OUT = 0x10, /// @brief  Transaction: outputs
     TX_ITEM_TYPE_OUT_EXT = 0x11,
-    TX_ITEM_TYPE_256_OUT = 0x12, // 256
-    TX_ITEM_TYPE_256_OUT_EXT = 0x13, // 256
-
     TX_ITEM_TYPE_PKEY = 0x20,
     TX_ITEM_TYPE_SIG = 0x30,
     TX_ITEM_TYPE_TOKEN = 0x40,
     TX_ITEM_TYPE_TOKEN_EXT = 0x41,
-
-    TX_ITEM_TYPE_256_TOKEN = 0x42,
-    TX_ITEM_TYPE_256_TOKEN_EXT = 0x43,
-
     TX_ITEM_TYPE_IN_COND = 0x50, /// @brief  Transaction: conditon inputs
-
     TX_ITEM_TYPE_OUT_COND = 0x60, /// @brief  Transaction: conditon outputs
-    TX_ITEM_TYPE_256_OUT_COND = 0x61, // 256
-
     TX_ITEM_TYPE_RECEIPT = 0x70,
-    TX_ITEM_TYPE_256_RECEIPT = 0x71,
 
     TX_ITEM_TYPE_OUT_ALL = 0xfe,
     TX_ITEM_TYPE_ANY = 0xff
@@ -223,19 +211,9 @@ 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;
 
-// 256
-// typedef struct dap_chain_256_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
-//     uint256_t value_datoshi; // Receipt value
-// } dap_chain_256_receipt_info_t;
 
 #ifdef __cplusplus
 extern "C" {
@@ -266,36 +244,15 @@ DAP_STATIC_INLINE uint64_t dap_chain_coins_to_datoshi(long double a_count)
 
 DAP_STATIC_INLINE uint128_t dap_chain_uint128_from(uint64_t a_from)
 {
-// #ifdef DAP_GLOBAL_IS_INT128
-//     return (uint128_t)a_from;
-// #else
-//     uint128_t l_ret = {{ .0, a_from}};
-//     return l_ret;
-// #endif
-    uint128_t l_ret = uint128_0;
-    ADD_64_INTO_128(a_from, &l_ret );
+#ifdef DAP_GLOBAL_IS_INT128
+    return (uint128_t)a_from;
+#else
+    uint128_t l_ret = {{ .0, a_from}};
     return l_ret;
-}
-
-// 256
-uint128_t dap_chain_uint128_from_uint256(uint256_t a_from);
-
-// 256
-DAP_STATIC_INLINE uint256_t dap_chain_uint256_from(uint64_t a_from)
-{
-    uint128_t l_temp_128 = uint128_0;
-    uint256_t l_ret_256 = uint256_0;
-    ADD_64_INTO_128(a_from, &l_temp_128);
-    ADD_128_INTO_256(l_temp_128, &l_ret_256);
-    return l_ret_256;
+#endif
 }
 
 uint64_t dap_chain_uint128_to(uint128_t a_from);
-// 256
-uint64_t dap_chain_uint256_to(uint256_t a_from);
-
-char *dap_chain_u256tostr(uint256_t v);
-
 
 char *dap_chain_balance_print(uint128_t a_balance);
 char *dap_chain_balance_to_coins(uint128_t a_balance);
diff --git a/modules/common/include/dap_chain_datum.h b/modules/common/include/dap_chain_datum.h
index 8723dda037d328b86487321e48b054934919786d..e01ac5de87884e3c7a58f5d73f084058537411e3 100644
--- a/modules/common/include/dap_chain_datum.h
+++ b/modules/common/include/dap_chain_datum.h
@@ -38,9 +38,6 @@
 /// Transaction header section
 #define DAP_CHAIN_DATUM_TX                  0x0100
 
-// 256
-#define DAP_CHAIN_DATUM_256_TX              0x0101
-
 /// Transaction request section
 #define DAP_CHAIN_DATUM_TX_REQUEST          0x0300
 
@@ -62,7 +59,6 @@
 /// Simple token decl
 #define DAP_CHAIN_DATUM_TOKEN_DECL           0xf000
 #define DAP_CHAIN_DATUM_TOKEN_EMISSION       0xf100
-#define DAP_CHAIN_DATUM_256_TOKEN_EMISSION   0xf101 // 256
 #define DAP_CHAIN_DATUM_TOKEN_DISMISSAL      0xf200
 
 #define DAP_CHAIN_DATUM_CUSTOM               0xffff
@@ -71,8 +67,6 @@
     switch (t) {                            \
         case DAP_CHAIN_DATUM_TX:            \
             s = "DATUM_TX"; break;          \
-        case DAP_CHAIN_DATUM_256_TX:            \
-            s = "DATUM_256_TX"; break;          \
         case DAP_CHAIN_DATUM_TX_REQUEST:    \
             s = "DATUM_WASM_CODE"; break;   \
         case DAP_CHAIN_DATUM_WASM_CODE:     \
@@ -91,8 +85,6 @@
             s = "DATUM_TOKEN_DECL"; break;  \
         case DAP_CHAIN_DATUM_TOKEN_EMISSION:\
             s = "DATUM_TOKEN_EMISSION"; break;\
-        case DAP_CHAIN_DATUM_256_TOKEN_EMISSION:\
-            s = "DATUM_256_TOKEN_EMISSION"; break;\
         default:                            \
             s = "DATUM_UNKNOWN"; break;     \
 }
diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h
index 20a75ba505103de2803f510f891aab6254136deb..78f1792d2e9acda44dd233f16e52e6c8618b113c 100644
--- a/modules/common/include/dap_chain_datum_token.h
+++ b/modules/common/include/dap_chain_datum_token.h
@@ -210,12 +210,11 @@ typedef struct dap_chain_datum_token_emission{
     struct  {
         uint8_t version;
         uint8_t type; // Emission Type
-        bool type_value_256;
         char ticker[DAP_CHAIN_TICKER_SIZE_MAX];
         dap_chain_addr_t address; // Emission holder's address
         union {
             uint64_t value;
-            uint256_t value_256;
+            uint256_t value256;
         };
         uint8_t nonce[DAP_CHAIN_DATUM_NONCE_SIZE];
     } DAP_ALIGN_PACKED hdr;
@@ -226,10 +225,7 @@ typedef struct dap_chain_datum_token_emission{
             uint64_t lock_time;
         } DAP_ALIGN_PACKED type_presale;
         struct {
-            union {
-                uint64_t value_start;// Default value. Static if nothing else is defined
-                uint256_t value_start_256;
-            };
+            uint64_t value_start;// Default value. Static if nothing else is defined
             char value_change_algo_codename[32];
         } DAP_ALIGN_PACKED type_atom_owner;
         struct {
diff --git a/modules/common/include/dap_chain_datum_tx.h b/modules/common/include/dap_chain_datum_tx.h
index 8c569f03caadd77a89d5a11184bba765af8ac22d..54885c4863ecfe326112fc46141c54141ac66043 100644
--- a/modules/common/include/dap_chain_datum_tx.h
+++ b/modules/common/include/dap_chain_datum_tx.h
@@ -81,10 +81,6 @@ int dap_chain_datum_tx_add_item(dap_chain_datum_tx_t **a_tx, const uint8_t *a_it
  */
 uint64_t dap_chain_datum_tx_add_in_item_list(dap_chain_datum_tx_t **a_tx, dap_list_t *a_list_used_out);
 
-// 256
-uint256_t dap_chain_datum_256_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
  *
@@ -110,9 +106,6 @@ 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, uint64_t a_value);
 
-// 256
-int dap_chain_datum_256_tx_add_out_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr, uint256_t a_value);
-
 /**
  * Create 'out'_ext item and insert to transaction
  *
@@ -121,10 +114,6 @@ int dap_chain_datum_256_tx_add_out_item(dap_chain_datum_tx_t **a_tx, const dap_c
 int dap_chain_datum_tx_add_out_ext_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr,
                                         uint64_t a_value, const char *a_token);
 
-// 256
-int dap_chain_datum_256_tx_add_out_ext_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr,
-                                        uint256_t a_value, const char *a_token);
-
 /**
  * Create 'out_cond' item and insert to transaction
  *
@@ -133,10 +122,6 @@ int dap_chain_datum_256_tx_add_out_ext_item(dap_chain_datum_tx_t **a_tx, const d
 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,
         uint64_t a_value, uint64_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);
 
-//256
-int dap_chain_datum_256_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);
-
 /**
 * Sign a transaction (Create sign 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 40735af6ec6939c1a3e506092185e53655024351..780c710c9aaa8d10cff8bd14b915b502121db4d8 100644
--- a/modules/common/include/dap_chain_datum_tx_in.h
+++ b/modules/common/include/dap_chain_datum_tx_in.h
@@ -51,12 +51,3 @@ typedef struct list_used_item {
     uint64_t value;
 //dap_chain_tx_out_t *tx_out;
 } list_used_item_t;
-
-// 256
-typedef struct list_used_item_256 {
-    dap_chain_hash_fast_t tx_hash_fast;
-    uint32_t num_idx_out;
-    uint8_t padding[4];
-    uint256_t value;
-//dap_chain_tx_out_t *tx_out;
-} list_used_item_256_t;
diff --git a/modules/common/include/dap_chain_datum_tx_items.h b/modules/common/include/dap_chain_datum_tx_items.h
index d5425f70b3085f4b5ef00f5f2bf99f8e65ff15ab..3b891bc45ca90e6ad24e0f375563c698a2de70cb 100644
--- a/modules/common/include/dap_chain_datum_tx_items.h
+++ b/modules/common/include/dap_chain_datum_tx_items.h
@@ -53,18 +53,14 @@ DAP_STATIC_INLINE const char * dap_chain_datum_tx_item_type_to_str(dap_chain_tx_
     switch(a_item_type){
         case TX_ITEM_TYPE_IN: return "TX_ITEM_TYPE_IN";
         case TX_ITEM_TYPE_OUT: return "TX_ITEM_TYPE_OUT";
-        case TX_ITEM_TYPE_256_OUT: return "TX_ITEM_TYPE_256_OUT"; // 256
         case TX_ITEM_TYPE_OUT_EXT: return "TX_ITEM_TYPE_OUT_EXT";
-        case TX_ITEM_TYPE_256_OUT_EXT: return "TX_ITEM_TYPE_256_OUT_EXT"; // 256
         case TX_ITEM_TYPE_PKEY: return "TX_ITEM_TYPE_PKEY";
         case TX_ITEM_TYPE_SIG: return "TX_ITEM_TYPE_SIG";
         case TX_ITEM_TYPE_TOKEN: return "TX_ITEM_TYPE_TOKEN";
         case TX_ITEM_TYPE_TOKEN_EXT: return "TX_ITEM_TYPE_TOKEN_EXT";
         case TX_ITEM_TYPE_IN_COND: return "TX_ITEM_TYPE_IN_COND";
         case TX_ITEM_TYPE_OUT_COND: return "TX_ITEM_TYPE_OUT_COND";
-        case TX_ITEM_TYPE_256_OUT_COND: return "TX_ITEM_TYPE_256_OUT_COND"; // 256
         case TX_ITEM_TYPE_RECEIPT: return "TX_ITEM_TYPE_RECEIPT";
-        case TX_ITEM_TYPE_256_RECEIPT: return "TX_ITEM_TYPE_256_RECEIPT"; // 256
         case TX_ITEM_TYPE_OUT_ALL: return "TX_ITEM_TYPE_OUT_ALL";
         case TX_ITEM_TYPE_ANY: return "TX_ITEM_TYPE_ANY";
         default: return "UNDEFINED";
@@ -86,9 +82,6 @@ size_t dap_chain_datum_item_tx_get_size(const uint8_t *a_item);
  */
 dap_chain_tx_token_t* dap_chain_datum_tx_item_token_create(dap_chain_hash_fast_t * a_datum_token_hash,const char * a_ticker);
 
-//256
-dap_chain_tx_token_t* dap_chain_datum_tx_item_256_token_create(dap_chain_hash_fast_t * a_datum_token_hash,const char * a_ticker);
-
 /**
  * Create item dap_chain_tx_out_t
  *
@@ -106,9 +99,6 @@ dap_chain_tx_in_cond_t* dap_chain_datum_tx_item_in_cond_create(dap_chain_hash_fa
  */
 dap_chain_tx_out_t* dap_chain_datum_tx_item_out_create(const dap_chain_addr_t *a_addr, uint64_t a_value);
 
-// 256
-dap_chain_tx_out_t* dap_chain_datum_tx_item_256_out_create(const dap_chain_addr_t *a_addr, uint256_t a_value);
-
 /**
  * Create item dap_chain_tx_out_ext_t
  *
@@ -116,9 +106,6 @@ dap_chain_tx_out_t* dap_chain_datum_tx_item_256_out_create(const dap_chain_addr_
  */
 dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_chain_addr_t *a_addr, uint64_t a_value, const char *a_token);
 
-// 256
-dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_256_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
  *
@@ -127,10 +114,6 @@ dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_256_out_ext_create(const dap_cha
 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,
         uint64_t a_value, uint64_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);
-// 256
-dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_256_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_cond, size_t a_cond_size);
 /**
  * Create item dap_chain_tx_out_cond_t for eXchange service
  *
@@ -139,11 +122,6 @@ dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_256_out_cond_create_srv_pay(dap
 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, uint64_t a_value,
                                                                              const void *a_params, uint32_t a_params_size);
-//256
-dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_256_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);
-
 
 /**
  * Create item dap_chain_tx_out_cond_t for stake service
@@ -151,12 +129,8 @@ dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_256_out_cond_create_srv_xchange
  * 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, uint64_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);
-// 256
-dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_256_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_addr_t *a_fee_addr, dap_chain_addr_t *a_hldr_addr,
+                                                                           const void *a_params, uint32_t a_params_size);
 /**
  * Create item dap_chain_tx_sig_t
  *
@@ -187,4 +161,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_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.h b/modules/common/include/dap_chain_datum_tx_out.h
index c70f0077ceecfe11ef56c2e255b08e0d93496077..0e3b46b304977c592573f3055550969d4d3910e8 100644
--- a/modules/common/include/dap_chain_datum_tx_out.h
+++ b/modules/common/include/dap_chain_datum_tx_out.h
@@ -39,4 +39,3 @@ typedef struct dap_chain_tx_out{
     } header; /// Only header's hash is used for verification
     dap_chain_addr_t addr; ////
 } DAP_ALIGN_PACKED dap_chain_tx_out_t;
-
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 b38a93bfcc6823ea431430ae5bf4353f02466f86..9eec59aeac09b77f3dfece7dbebd5c604490a79f 100644
--- a/modules/common/include/dap_chain_datum_tx_out_cond.h
+++ b/modules/common/include/dap_chain_datum_tx_out_cond.h
@@ -58,10 +58,7 @@ typedef struct dap_chain_tx_out_cond {
         /// Condition subtype
         dap_chain_tx_out_cond_subtype_t subtype;
         /// Number of Datoshis ( DAP/10^9 ) to be reserver for service
-        union {
-            uint64_t value;
-            uint256_t value_256;
-        };
+        uint64_t value;
         /// When time expires this output could be used only by transaction owner
         dap_chain_time_t ts_expires;
     } header;
@@ -75,10 +72,7 @@ typedef struct dap_chain_tx_out_cond {
             /// Price unit thats used to check price max
             dap_chain_net_srv_price_unit_uid_t unit;
             /// Maximum price per unit
-            union {
-                uint64_t unit_price_max_datoshi;
-                uint256_t unit_price_max_datoshi_256;
-            };
+            uint64_t unit_price_max_datoshi;
         } srv_pay;
         struct {
             // Service uid that only could be used for this outout
@@ -88,10 +82,7 @@ typedef struct dap_chain_tx_out_cond {
             // Chain network to change to
             dap_chain_net_id_t net_id;
             // Total amount of datoshi to change to
-            union {
-                uint64_t value;
-                uint256_t value_256;
-            };
+            uint64_t value;
         } srv_xchange;
         struct {
             // Service uid that only could be used for this outout
diff --git a/modules/common/include/dap_chain_datum_tx_receipt.h b/modules/common/include/dap_chain_datum_tx_receipt.h
index b999d43533e335179497c18a45090632882d6dda..4d5effd8f80da5095939b48a3490998c48b8cc33 100644
--- a/modules/common/include/dap_chain_datum_tx_receipt.h
+++ b/modules/common/include/dap_chain_datum_tx_receipt.h
@@ -39,6 +39,7 @@ typedef struct dap_chain_datum_tx_receipt {
     byte_t exts_n_signs[]; // Signatures, first from provider, second from client
 }DAP_ALIGN_PACKED dap_chain_datum_tx_receipt_t;
 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -48,18 +49,9 @@ static inline size_t dap_chain_datum_tx_receipt_get_size_hdr(){ return 1+sizeof
 dap_chain_datum_tx_receipt_t * dap_chain_datum_tx_receipt_create( dap_chain_net_srv_uid_t srv_uid,
                                                                   dap_chain_net_srv_price_unit_uid_t units_type,
                                                                     uint64_t units, uint64_t value_datoshi, const void * a_ext, size_t a_ext_size);
-
-// 256
-dap_chain_datum_tx_receipt_t * dap_chain_datum_256_tx_receipt_create( dap_chain_net_srv_uid_t srv_uid,
-                                                                  dap_chain_net_srv_price_unit_uid_t units_type,
-                                                                    uint64_t units, uint256_t value_datoshi, const void * a_ext, size_t a_ext_size);
-
 size_t dap_chain_datum_tx_receipt_sign_add(dap_chain_datum_tx_receipt_t ** a_receipt, size_t a_receipt_size, dap_enc_key_t *a_key );
-
 dap_sign_t* dap_chain_datum_tx_receipt_sign_get(dap_chain_datum_tx_receipt_t * l_receipt, size_t l_receipt_size , uint16_t sign_position);
-
 uint16_t dap_chain_datum_tx_receipt_signs_count(dap_chain_datum_tx_receipt_t * l_receipt, size_t l_receipt_size);
-
 static inline uint16_t dap_chain_datum_tx_receipt_get_size(const dap_chain_datum_tx_receipt_t * l_receipt)
 {
     return l_receipt->size;
diff --git a/modules/consensus/block-poa/CMakeLists.txt b/modules/consensus/block-poa/CMakeLists.txt
index 086591aba66c41d3e17a19d4b725cb1fea19e9a5..d54c77b2d6de9a7bded5e2f4413b1791d87fb394 100644
--- a/modules/consensus/block-poa/CMakeLists.txt
+++ b/modules/consensus/block-poa/CMakeLists.txt
@@ -6,6 +6,6 @@ file(GLOB DAP_CHAIN_BLOCK_CS_POA_HEADERS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_BLOCK_CS_POA_SRCS} ${DAP_CHAIN_BLOCK_CS_POA_HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_cs_blocks dap_chain_net_srv_stake)
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_link_libraries(dap_chain_cs_block_poa dap_core dap_crypto dap_chain dap_chain_cs_blocks dap_chain_net_srv_stake)
+target_include_directories(dap_chain_cs_block_poa INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
diff --git a/modules/consensus/block-pos/CMakeLists.txt b/modules/consensus/block-pos/CMakeLists.txt
index 587d3b2d0219d463bef78a67f7d2ed8dfc62016f..2417e6529e529168867e0f383b60606f07463e1a 100644
--- a/modules/consensus/block-pos/CMakeLists.txt
+++ b/modules/consensus/block-pos/CMakeLists.txt
@@ -6,6 +6,6 @@ file(GLOB DAP_CHAIN_CS_BLOCK_POS_HEADERS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_CS_BLOCK_POS_SRCS} ${DAP_CHAIN_CS_BLOCK_POS_HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_cs_blocks dap_chain_net_srv_stake)
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_link_libraries(dap_chain_cs_block_pos dap_core dap_crypto dap_chain dap_chain_cs_blocks dap_chain_net_srv_stake)
+target_include_directories(dap_chain_cs_block_pos INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
diff --git a/modules/consensus/block-pow/CMakeLists.txt b/modules/consensus/block-pow/CMakeLists.txt
index 9f3cc01638bae46853fde94ac5cf5fe0a237561e..334d6eb6a932e22561749a8c14863ac1f7ca81d2 100644
--- a/modules/consensus/block-pow/CMakeLists.txt
+++ b/modules/consensus/block-pow/CMakeLists.txt
@@ -7,6 +7,6 @@ file(GLOB DAP_CHAIN_BLOCK_CS_POW_HEADERS include/*.h)
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_BLOCK_CS_POW_SRCS} ${DAP_CHAIN_BLOCK_CS_POW_HEADERS})
 
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_cs_block )
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_link_libraries(dap_chain_cs_block_pow dap_core dap_crypto dap_chain dap_chain_cs_block )
+target_include_directories(dap_chain_block_cs_pow INTERFACE .)
 
diff --git a/modules/consensus/dag-poa/CMakeLists.txt b/modules/consensus/dag-poa/CMakeLists.txt
index 457d52f9abf7243c6903838c650ec0b595d85a51..12a35ad6a4d8dbf26282473857fc694eb38d5ce6 100644
--- a/modules/consensus/dag-poa/CMakeLists.txt
+++ b/modules/consensus/dag-poa/CMakeLists.txt
@@ -6,6 +6,6 @@ file(GLOB DAP_CHAIN_DAG_CS_POA_HEADERS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_DAG_CS_POA_SRCS} ${DAP_CHAIN_DAG_CS_POA_HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_cs_dag dap_chain_net_srv_stake)
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_link_libraries(dap_chain_cs_dag_poa dap_core dap_crypto dap_chain dap_chain_cs_dag dap_chain_net_srv_stake)
+target_include_directories(dap_chain_cs_dag_poa INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
index 4a6c8fdd628bdf4dbcffe9e689a05bd36e1d6b9b..766da49dfccff3b1fd6ba6c1139aa13e35b3c334 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -354,13 +354,14 @@ static dap_chain_cs_dag_event_t * s_callback_event_create(dap_chain_cs_dag_t * a
                                                           dap_chain_hash_fast_t * a_hashes, size_t a_hashes_count, size_t* a_event_size)
 {
     dap_return_val_if_fail(a_dag && a_dag->chain && DAP_CHAIN_CS_DAG_POA(a_dag), NULL);
+    dap_chain_net_t * l_net = dap_chain_net_by_name( a_dag->chain->net_name );
     dap_chain_cs_dag_poa_t * l_poa = DAP_CHAIN_CS_DAG_POA(a_dag);
     if ( PVT(l_poa)->events_sign_cert == NULL){
         log_it(L_ERROR, "Can't sign event with events_sign_cert in [dag-poa] section");
         return  NULL;
     }
     if ( s_seed_mode || (a_hashes && a_hashes_count) ){
-        dap_chain_cs_dag_event_t * l_event = dap_chain_cs_dag_event_new( a_dag->chain->id, a_dag->chain->cells->id, a_datum,
+        dap_chain_cs_dag_event_t * l_event = dap_chain_cs_dag_event_new( a_dag->chain->id, l_net->pub.cell_id, a_datum,
                                                          PVT(l_poa)->events_sign_cert->enc_key, a_hashes, a_hashes_count,a_event_size);
         return l_event;
     }else
diff --git a/modules/consensus/dag-pos/CMakeLists.txt b/modules/consensus/dag-pos/CMakeLists.txt
index 33b2032af8fdda1b7e8f751d0c06ebb0899b0e00..8b8dff9976790e5c248009bed61dd6736fe6b216 100644
--- a/modules/consensus/dag-pos/CMakeLists.txt
+++ b/modules/consensus/dag-pos/CMakeLists.txt
@@ -6,6 +6,6 @@ file(GLOB DAP_CHAIN_CS_DAG_POS_HEADERS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_CS_DAG_POS_SRCS} ${DAP_CHAIN_CS_DAG_POS_HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_cs_dag dap_chain_net_srv_stake)
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_link_libraries(dap_chain_cs_dag_pos dap_core dap_crypto dap_chain dap_chain_cs_dag dap_chain_net_srv_stake)
+target_include_directories(dap_chain_cs_dag_pos INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
diff --git a/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c b/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c
index 72e450e57405ab13fb2b4828a94897ad8a1c2b86..1f977c5bcd11fc39bd47c9a1f24207c62a42a85c 100644
--- a/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c
+++ b/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c
@@ -27,7 +27,6 @@
 #include "dap_common.h"
 #include "dap_string.h"
 #include "dap_strfuncs.h"
-#include "dap_chain_cell.h"
 #include "dap_chain_cs.h"
 #include "dap_chain_cs_dag.h"
 #include "dap_chain_cs_dag_pos.h"
@@ -206,7 +205,7 @@ static dap_chain_cs_dag_event_t * s_callback_event_create(dap_chain_cs_dag_t * a
         return NULL;
     }
     if(a_datum || (a_hashes && a_hashes_count)) {
-        dap_chain_cs_dag_event_t * l_event = dap_chain_cs_dag_event_new(a_dag->chain->id, a_dag->chain->cells->id, a_datum,
+        dap_chain_cs_dag_event_t * l_event = dap_chain_cs_dag_event_new(a_dag->chain->id, l_net->pub.cell_id, a_datum,
                                                                         PVT(l_pos)->events_sign_key, a_hashes, a_hashes_count, a_dag_event_size);
         return l_event;
     } else
@@ -270,40 +269,6 @@ static int s_callback_event_verify(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_
                     return -6;
                 }
             }
-            /*
-            dap_chain_datum_t *l_datum = dap_chain_cs_dag_event_get_datum(a_dag_event);
-            // transaction include emission?
-            bool l_is_emit = false;
-            if(l_datum && l_datum->header.type_id == DAP_CHAIN_DATUM_TX) {
-                // transaction
-                dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*) l_datum->data;
-                // find Token items
-                dap_list_t *l_list_tx_token = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_TOKEN, NULL);
-                if(l_list_tx_token)
-                    l_is_emit = true;
-                dap_list_free(l_list_tx_token);
-            }
-            // if emission then the wallet can be with zero balance
-            if(l_is_emit)
-                return 0;*/
-
-            // bool l_is_enough_balance = false;
-            // for (size_t i =0; i <l_pos_pvt->tokens_hold_size; i++){
-            //     uint256_t l_balance = dap_chain_ledger_calc_balance ( a_dag->chain->ledger , &l_addr, l_pos_pvt->tokens_hold[i] );
-            //     uint64_t l_value = dap_chain_uint256_to(l_balance);
-            //     if (l_value >= l_pos_pvt->tokens_hold_value[i]) {
-            //         l_verified_num++;
-            //         l_is_enough_balance = true;
-            //         break;
-            //     }
-            // }
-            // if (! l_is_enough_balance ){
-            //     char *l_addr_str = dap_chain_addr_to_str(&l_addr);
-            //     log_it(L_WARNING, "Verify of event is false, because bal is not enough for addr=%s", l_addr_str);
-            //     DAP_DELETE(l_addr_str);
-            //     return -1;
-            //}
-
         }
         // Check number
         if ( l_verified_num >= l_pos_pvt->confirmations_minimum ){
diff --git a/modules/consensus/none/dap_chain_cs_none.c b/modules/consensus/none/dap_chain_cs_none.c
index 30ceb6c888918b9a7fdb150be03c7ca5a82f23b0..243565c6679c1020d1af546a45fd10ba26150637 100644
--- a/modules/consensus/none/dap_chain_cs_none.c
+++ b/modules/consensus/none/dap_chain_cs_none.c
@@ -33,7 +33,6 @@
 #include "dap_strfuncs.h"
 #include "dap_config.h"
 #include "dap_hash.h"
-#include "dap_chain_cell.h"
 #include "dap_chain_ledger.h"
 #include "dap_chain_global_db.h"
 #include "dap_chain_global_db_driver.h"
@@ -71,7 +70,7 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
 static dap_chain_atom_verify_res_t s_chain_callback_atom_verify(dap_chain_t * a_chain, dap_chain_atom_ptr_t, size_t); //    Verify new event in gdb
 static size_t s_chain_callback_atom_get_static_hdr_size(void); //    Get gdb event header size
 
-static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain, dap_chain_cell_id_t a_cell_id);
+static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain);
 static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create_from(dap_chain_t * a_chain,
         dap_chain_atom_ptr_t a, size_t a_atom_size);
 
@@ -177,11 +176,12 @@ int dap_chain_gdb_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
     l_gdb_priv->chain = a_chain;
 
     if(!l_gdb_priv->celled){
-        l_gdb_priv->group_datums = dap_strdup_printf( "chain-gdb.%s.chain-%016"DAP_UINT64_FORMAT_X,l_net->pub.name,
+        l_gdb_priv->group_datums = dap_strdup_printf( "chain-gdb.%s.chain-%016llX",l_net->pub.name,
                                                   a_chain->id.uint64);
     }else {
-        l_gdb_priv->group_datums = dap_strdup_printf( "chain-gdb.%s.chain-%016"DAP_UINT64_FORMAT_X".cell-%016"DAP_UINT64_FORMAT_X,l_net->pub.name,
-                                                  a_chain->id.uint64, a_chain->cells->id.uint64);
+        // here is not work because dap_chain_net_load() not yet fully performed
+        l_gdb_priv->group_datums = dap_strdup_printf( "chain-gdb.%s.chain-%016llX.cell-%016llX",l_net->pub.name,
+                                                  a_chain->id.uint64, l_net->pub.cell_id.uint64);
     }
 
     // Add group prefix that will be tracking all changes
@@ -349,15 +349,10 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
             if (dap_chain_ledger_token_load(a_chain->ledger,l_token, l_datum->header.data_size))
                 return ATOM_REJECT;
         }break;
-        case DAP_CHAIN_DATUM_256_TOKEN_EMISSION: // 256
         case DAP_CHAIN_DATUM_TOKEN_EMISSION: {
-            dap_chain_datum_token_emission_t *l_token_em = (dap_chain_datum_token_emission_t*) l_datum->data;
-            l_token_em->hdr.type_value_256 = l_datum->header.type_id == DAP_CHAIN_DATUM_256_TOKEN_EMISSION ?
-                                                true : false;
-            if (dap_chain_ledger_token_emission_load(a_chain->ledger, l_token_em, l_datum->header.data_size))
+            if (dap_chain_ledger_token_emission_load(a_chain->ledger, l_datum->data, l_datum->header.data_size))
                 return ATOM_REJECT;
         }break;
-        case DAP_CHAIN_DATUM_256_TX: // 256
         case DAP_CHAIN_DATUM_TX:{
             dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*) l_datum->data;
             // No trashhold herr, don't save bad transactions to base
@@ -421,7 +416,7 @@ static size_t s_chain_callback_atom_get_static_hdr_size()
  * @param a_chain dap_chain_t a_chain
  * @return dap_chain_atom_iter_t* 
  */
-static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain, dap_chain_cell_id_t a_cell_id)
+static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain)
 {
     dap_chain_atom_iter_t * l_iter = DAP_NEW_Z(dap_chain_atom_iter_t);
     l_iter->chain = a_chain;
diff --git a/modules/dht/CMakeLists.txt b/modules/dht/CMakeLists.txt
index d1c37c570e7f993b87413a06d65d8b27488caa7a..bbdec344aedccb617eb268dd679fd2f88e308f85 100644
--- a/modules/dht/CMakeLists.txt
+++ b/modules/dht/CMakeLists.txt
@@ -13,6 +13,6 @@ add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_DHT_SRC} ${DAP_CHAIN_DHT_HDR})
 
 target_link_libraries(${PROJECT_NAME}  ${DAP_CHAIN_DHT_LIBS})
 
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_include_directories(dap_chain_dht INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
 
diff --git a/modules/global-db/CMakeLists.txt b/modules/global-db/CMakeLists.txt
index 1d22fa8fc7419a150c632feda51d79d4085baf46..1be3f9836b5bc6c6cb5ab89e00c59cc274fc1214 100644
--- a/modules/global-db/CMakeLists.txt
+++ b/modules/global-db/CMakeLists.txt
@@ -20,7 +20,7 @@ add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_GLOBAL_DB_SRC} ${DAP_CHAIN_GLOBAL
 
 target_link_libraries(${PROJECT_NAME}  ${DAP_CHAIN_GLOBAL_DB_LIBS})
 
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_include_directories(dap_chain_global_db INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
 target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../3rdparty/uthash/src)
 
diff --git a/modules/mempool/CMakeLists.txt b/modules/mempool/CMakeLists.txt
index b337f93df4d86b0d331ad9c9ba7cbaed078a5d21..f2d0ede23294b502d943b706cbcc2273f1242944 100644
--- a/modules/mempool/CMakeLists.txt
+++ b/modules/mempool/CMakeLists.txt
@@ -6,6 +6,6 @@ file(GLOB DAP_CHAIN_MEMPOOL_HDR include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_MEMPOOL_SRC} ${DAP_CHAIN_MEMPOOL_HDR})
 
-target_link_libraries(${PROJECT_NAME} dap_http_server dap_client dap_chain_net dap_chain_global_db dap_core)
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_link_libraries(dap_chain_mempool dap_http_server dap_client dap_chain_net dap_chain_global_db dap_core)
+target_include_directories(dap_chain_mempool INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
diff --git a/modules/mining/CMakeLists.txt b/modules/mining/CMakeLists.txt
index 5950015428d51b7a2359c33fdfe4241b75508844..3e4e88edd39b4acd5e3154d799278b2d20b83112 100644
--- a/modules/mining/CMakeLists.txt
+++ b/modules/mining/CMakeLists.txt
@@ -12,7 +12,7 @@ add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_CRYPTO_SRCS} ${DAP_CHAIN_CRYPTO_H
 
 target_include_directories(dap_chain_crypto INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain monero_crypto)
+target_link_libraries(dap_chain_crypto dap_core dap_crypto dap_chain monero_crypto)
 
 set(${PROJECT_NAME}_DEFINITIONS CACHE INTERNAL "${PROJECT_NAME}: Definitions" FORCE)
 set(${PROJECT_NAME}_INCLUDE_DIRS ${PROJECT_SOURCE_DIR} CACHE INTERNAL "${PROJECT_NAME}: Include Directories" FORCE)
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index d09d87b261e62a1a9ac1aea616e87663373ec522..f88a0e90499f55b5bc0e5629b333182a77ba6ed0 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -412,8 +412,7 @@ void dap_chain_net_sync_gdb_broadcast(void *a_arg, const char a_op_code, const c
         dap_store_obj_pkt_t *l_data_out = dap_store_packet_single(l_obj);
         dap_store_obj_free(l_obj, 1);
         dap_chain_t *l_chain = dap_chain_net_get_chain_by_name(l_net, "gdb");
-        dap_chain_id_t l_chain_id = l_chain ? l_chain->id : (dap_chain_id_t){};
-        dap_chain_cell_id_t l_cell_id = l_chain ? l_chain->cells->id : (dap_chain_cell_id_t){};
+        dap_chain_id_t l_chain_id = l_chain ? l_chain->id : (dap_chain_id_t) {};
         pthread_rwlock_rdlock(&PVT(l_net)->rwlock);
         for (dap_list_t *l_tmp = PVT(l_net)->links; l_tmp; l_tmp = dap_list_next(l_tmp)) {
             dap_chain_node_client_t *l_node_client = (dap_chain_node_client_t *)l_tmp->data;
@@ -421,7 +420,7 @@ void dap_chain_net_sync_gdb_broadcast(void *a_arg, const char a_op_code, const c
             if (l_stream_worker)
                 continue;
             dap_stream_ch_chain_pkt_write_mt(l_stream_worker, l_node_client->ch_chain_uuid, DAP_STREAM_CH_CHAIN_PKT_TYPE_GLOBAL_DB, l_net->pub.id.uint64,
-                                                 l_chain_id.uint64, l_cell_id.uint64, l_data_out,
+                                                 l_chain_id.uint64, l_net->pub.cell_id.uint64, l_data_out,
                                                  sizeof(dap_store_obj_pkt_t) + l_data_out->data_size);
         }
         pthread_rwlock_unlock(&PVT(l_net)->rwlock);
@@ -1985,6 +1984,8 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx)
                            NODE_ADDR_FP_ARGS(l_node_addr),
                            l_net_pvt->node_info->hdr.links_number,
                            l_net_pvt->node_info->hdr.cell_id.uint64);
+                    // save cell_id
+                    l_net->pub.cell_id.uint64 = l_net_pvt->node_info->hdr.cell_id.uint64;
                 }
             }
             else{
@@ -2565,22 +2566,12 @@ int dap_chain_net_verify_datum_for_add(dap_chain_net_t *a_net, dap_chain_datum_t
         return -11;
 
     switch ( a_datum->header.type_id) {
-        case DAP_CHAIN_DATUM_256_TX: // 256
-        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_TOKEN_DECL:
-            return dap_chain_ledger_token_decl_add_check( a_net->pub.ledger,
-                    (dap_chain_datum_token_t*) a_datum->data );
-
-        case DAP_CHAIN_DATUM_256_TOKEN_EMISSION: // 256
-        case DAP_CHAIN_DATUM_TOKEN_EMISSION: {
-            dap_chain_datum_token_emission_t *l_token_em = (dap_chain_datum_token_emission_t*) a_datum->data;
-            l_token_em->hdr.type_value_256 = a_datum->header.type_id == DAP_CHAIN_DATUM_256_TOKEN_EMISSION ?
-                                                true : false;
-            return dap_chain_ledger_token_emission_add_check( a_net->pub.ledger, l_token_em, a_datum->header.data_size );
-        }
+        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_TOKEN_DECL: 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;
     }
 }
@@ -2816,24 +2807,16 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
                                     dap_hash_fast_to_str(&l_in->header.tx_prev_hash, l_tx_prev_hash_str, sizeof (l_tx_prev_hash_str)-1);
                                     dap_string_append_printf(a_str_out,"\ttx_prev_hash : %s\n", l_tx_prev_hash_str );
                                 } break;
-                                case TX_ITEM_TYPE_256_OUT: // 256
                                 case TX_ITEM_TYPE_OUT:{
                                     dap_chain_tx_out_t * l_out = l_cur->data;
-                                    if ( l_item_type == TX_ITEM_TYPE_256_OUT ) // u256_t value
-                                        dap_string_append_printf(a_str_out,"\tvalue: %s\n", dap_chain_u256tostr(l_out->header.value_256) );
-                                    else // u64_t value
-                                        dap_string_append_printf(a_str_out,"\tvalue: %"DAP_UINT64_FORMAT_U"\n", l_out->header.value );
+                                    dap_string_append_printf(a_str_out,"\tvalue: %"DAP_UINT64_FORMAT_U"\n", l_out->header.value );
                                     char * l_addr_str = dap_chain_addr_to_str(&l_out->addr);
                                     dap_string_append_printf(a_str_out,"\taddr : %s\n", l_addr_str );
                                     DAP_DELETE(l_addr_str);
                                 } break;
-                                case TX_ITEM_TYPE_256_OUT_EXT: // 256
                                 case TX_ITEM_TYPE_OUT_EXT:{
                                     dap_chain_tx_out_ext_t * l_out_ext = l_cur->data;
-                                    if ( l_item_type == TX_ITEM_TYPE_256_OUT_EXT ) // u256_t value
-                                        dap_string_append_printf(a_str_out,"\tvalue: %s\n", dap_chain_u256tostr(l_out_ext->header.value_256) );
-                                    else
-                                        dap_string_append_printf(a_str_out,"\tvalue: %"DAP_UINT64_FORMAT_U"\n", l_out_ext->header.value );
+                                    dap_string_append_printf(a_str_out,"\tvalue: %"DAP_UINT64_FORMAT_U"\n", l_out_ext->header.value );
                                     char * l_addr_str = dap_chain_addr_to_str(&l_out_ext->addr);
                                     dap_string_append_printf(a_str_out,"\taddr : %s\n", l_addr_str );
                                     dap_string_append_printf(a_str_out,"\ttoken : %s\n", l_out_ext->token );
@@ -2850,7 +2833,6 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
                                     dap_hash_fast_to_str(&l_sign_hash,l_sign_hash_str,sizeof (l_sign_hash_str)-1);
                                     dap_string_append_printf(a_str_out,"\tpkey_hash: %s\n", l_sign_hash_str );
                                 } break;
-                                case TX_ITEM_TYPE_256_TOKEN: // 256
                                 case TX_ITEM_TYPE_TOKEN:{
                                     dap_chain_tx_token_t * l_token = l_cur->data;
                                     dap_string_append_printf(a_str_out,"\tticker: %s\n", l_token->header.ticker );
@@ -2860,7 +2842,6 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
                                                                sizeof (l_token_emission_hash_str)-1);
                                     dap_string_append_printf(a_str_out,"\ttoken_emission_hash: %s", l_token_emission_hash_str );
                                 } break;
-                                case TX_ITEM_TYPE_256_TOKEN_EXT: // 256
                                 case TX_ITEM_TYPE_TOKEN_EXT:{
                                     dap_chain_tx_token_ext_t * l_token = l_cur->data;
                                     dap_string_append_printf(a_str_out,"\tversion: %u\n",l_token->header.version );
@@ -2881,13 +2862,9 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
                                     dap_hash_fast_to_str(&l_in->header.tx_prev_hash, l_tx_prev_hash_str,sizeof (l_tx_prev_hash_str)-1);
                                     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
                                 case TX_ITEM_TYPE_OUT_COND:{
                                     dap_chain_tx_out_cond_t * l_out = l_cur->data;
-                                    if ( l_item_type == TX_ITEM_TYPE_256_OUT_COND ) // u256_t value
-                                        dap_string_append_printf(a_str_out,"\tvalue: %s\n", dap_chain_u256tostr(l_out->header.value_256) );
-                                    else
-                                        dap_string_append_printf(a_str_out,"\tvalue: %"DAP_UINT64_FORMAT_U"\n", l_out->header.value );
+                                    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:{
                                             dap_string_append_printf(a_str_out,"\tsubtype: DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY\n");
@@ -2901,11 +2878,7 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
                                                 case SERV_UNIT_B : dap_string_append_printf(a_str_out,"\tunit: SERV_UNIT_B\n"); break;
                                                 default: dap_string_append_printf(a_str_out,"\tunit: SERV_UNIT_UNKNOWN\n"); break;
                                             }
-                                            if ( l_item_type == TX_ITEM_TYPE_256_OUT_COND ) // u256_t value
-                                                dap_string_append_printf(a_str_out,"\tunit_price_max: %s\n", dap_chain_u256tostr(l_out->subtype.srv_pay.unit_price_max_datoshi_256));
-                                            else
-                                                dap_string_append_printf(a_str_out,"\tunit_price_max: %"DAP_UINT64_FORMAT_U"\n", l_out->subtype.srv_pay.unit_price_max_datoshi);
-                                            
+                                            dap_string_append_printf(a_str_out,"\tunit_price_max: %"DAP_UINT64_FORMAT_U"\n", l_out->subtype.srv_pay.unit_price_max_datoshi);
                                             char l_pkey_hash_str[70]={[0]='\0'};
                                             dap_chain_hash_fast_to_str(&l_out->subtype.srv_pay.pkey_hash, l_pkey_hash_str, sizeof (l_pkey_hash_str)-1);
                                             dap_string_append_printf(a_str_out,"\tpkey_hash: %s\n", l_pkey_hash_str );
diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c
index 87ec92f89ac3aa53565a46a0b81c9efee12c0099..99f969470903e36c9082db9d739f9b10dfd89f74 100644
--- a/modules/net/dap_chain_node.c
+++ b/modules/net/dap_chain_node.c
@@ -51,31 +51,32 @@
 /**
  * Generate node address by shard id
  */
-dap_chain_node_addr_t* dap_chain_node_gen_addr(dap_chain_net_id_t a_net_id)
+dap_chain_node_addr_t* dap_chain_node_gen_addr(dap_chain_net_t * a_net,dap_chain_cell_id_t *shard_id)
 {
-    dap_chain_node_addr_t *l_addr = DAP_NEW_Z(dap_chain_node_addr_t);
-    dap_chain_hash_fast_t l_hash;
-    dap_hash_fast(&a_net_id, sizeof(dap_chain_net_id_t), &l_hash);
+    if(!shard_id)
+        return NULL;
+    dap_chain_node_addr_t *a_addr = DAP_NEW_Z(dap_chain_node_addr_t);
+    dap_chain_hash_fast_t a_hash;
+    dap_hash_fast(shard_id, sizeof(dap_chain_cell_id_t), &a_hash);
     // first 4 bytes is last 4 bytes of shard id hash
-    memcpy(l_addr->raw, l_hash.raw + sizeof(l_hash.raw) - sizeof(uint64_t) / 2, sizeof(uint64_t) / 2);
+    memcpy(a_addr->raw, a_hash.raw + sizeof(a_hash.raw) - sizeof(uint64_t) / 2, sizeof(uint64_t) / 2);
     // last 4 bytes is random
-    randombytes(l_addr->raw + sizeof(uint64_t) / 2, sizeof(uint64_t) / 2);
+    randombytes(a_addr->raw + sizeof(uint64_t) / 2, sizeof(uint64_t) / 2);
     // for LITTLE_ENDIAN (Intel), do nothing, otherwise swap bytes
-    l_addr->uint64 = le64toh(l_addr->uint64); // l_addr->raw the same l_addr->uint64
-    return l_addr;
+    a_addr->uint64 = le64toh(a_addr->uint64); // a_addr->raw the same a_addr->uint64
+    return a_addr;
 }
 
 /**
  * Check the validity of the node address by cell id
  */
-bool dap_chain_node_check_addr(dap_chain_net_t *a_net, dap_chain_node_addr_t *a_addr)
+bool dap_chain_node_check_addr(dap_chain_net_t * a_net,dap_chain_node_addr_t *addr, dap_chain_cell_id_t *shard_id)
 {
-    if (!a_addr || !a_net)
-        return false;
-    dap_chain_hash_fast_t l_hash;
-    dap_hash_fast(&a_net->pub.id, sizeof(dap_chain_net_id_t), &l_hash);
-    // first 4 bytes is last 4 bytes of shard id hash
-    return !memcmp(a_addr->raw, l_hash.raw + sizeof(l_hash.raw) - sizeof(uint64_t) / 2, sizeof(uint64_t) / 2);
+    bool ret = false;
+    if(!addr || !shard_id)
+        ret= false;
+
+    return ret;
 }
 
 /**
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 9cf8c938f8e19f5dcc1ad13ec3f29c59dc3b9587..652309a265c9322b8aa177542365fc828ec184b0 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -1800,10 +1800,9 @@ int com_tx_wallet(int argc, char ** argv, char **str_reply)
                 dap_string_append_printf(l_string_ret, "balance: 0");
             for(size_t i = 0; i < l_addr_tokens_size; i++) {
                 if(l_addr_tokens[i]) {
-                    // uint128_t l_balance = dap_chain_ledger_calc_balance(l_ledger, l_addr, l_addr_tokens[i]);
-                    uint256_t l_balance = dap_chain_ledger_calc_balance(l_ledger, l_addr, l_addr_tokens[i]);
-                    char *l_balance_coins = dap_chain_balance_to_coins(dap_chain_uint128_from_uint256(l_balance));
-                    char *l_balance_datoshi = dap_chain_balance_print(dap_chain_uint128_from_uint256(l_balance));
+                    uint128_t l_balance = dap_chain_ledger_calc_balance(l_ledger, l_addr, l_addr_tokens[i]);
+                    char *l_balance_coins = dap_chain_balance_to_coins(l_balance);
+                    char *l_balance_datoshi = dap_chain_balance_print(l_balance);
                     dap_string_append_printf(l_string_ret, "\t%s (%s) %s\n", l_balance_coins,
                             l_balance_datoshi, l_addr_tokens[i]);
                     if(i < l_addr_tokens_size - 1)
@@ -3137,23 +3136,16 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
     int arg_index = 1;
     const char *str_tmp = NULL;
     char *str_reply_tmp = NULL;
-    // uint64_t l_emission_value = 0;
-    uint256_t l_emission_value = uint256_0;
-
+    uint64_t l_emission_value = 0;
 
     const char * l_ticker = NULL;
 
     const char * l_addr_str = NULL;
 
     const char * l_emission_hash_str = NULL;
-    const char * l_type_256 = NULL;
-
     char * l_emission_hash_str_new = NULL;
     dap_chain_hash_fast_t l_emission_hash={0};
-    
     dap_chain_datum_token_emission_t * l_emission = NULL;
-    //dap_chain_datum_256_token_emission_t * l_emission_256 = NULL; // 256
-    
     char * l_emission_hash_str_base58 = NULL;
 
     const char * l_certs_str = NULL;
@@ -3173,7 +3165,6 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
     dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-H", &l_hash_out_type);
     if(!l_hash_out_type)
         l_hash_out_type = "hex";
-
     if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type,"base58")) {
         dap_chain_node_cli_set_reply_text(a_str_reply, "invalid parameter -H, valid values: -H <hex | base58>");
         return -1;
@@ -3189,9 +3180,6 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
     // Token emission
     dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-emission", &l_emission_hash_str);
 
-    // 256
-    dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-256", &l_type_256);
-
     // Emission certs
     dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-certs", &l_certs_str);
 
@@ -3203,11 +3191,10 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
 
     // Emission value
     if(dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-emission_value", &str_tmp)) {
-        // l_emission_value = strtoull(str_tmp, NULL, 10);
-        l_emission_value = GET_256_FROM_128(dap_strtou128(str_tmp, NULL, 10)); 
+        l_emission_value = strtoull(str_tmp, NULL, 10);
     }
 
-    if( EQUAL_256(l_emission_value, uint256_0) ) {
+    if(!l_emission_value) {
         dap_chain_node_cli_set_reply_text(a_str_reply, "token_emit requires parameter '-emission_value'");
         return -1;
     }
@@ -3227,6 +3214,7 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
         return -4;
     }
 
+
     if (l_emission_hash_str){// Load emission
         l_emission_hash_str_base58 = dap_enc_base58_encode_hash_to_str(&l_emission_hash);
         if (dap_chain_hash_fast_from_str( l_emission_hash_str,&l_emission_hash) == 0 ){
@@ -3259,6 +3247,8 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
         }
     }
 
+
+
     dap_chain_addr_t * l_addr = dap_chain_addr_from_str(l_addr_str);
 
     if(!l_addr) {
@@ -3302,30 +3292,16 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
         size_t l_emission_size = sizeof(l_emission->hdr) +
                 sizeof(l_emission->data.type_auth.signs_count);
 
-        // size_t l_emission_256_size = sizeof(l_emission_256->hdr) +
-        //         sizeof(l_emission_256->data.type_auth.signs_count);
-
         l_emission = DAP_NEW_Z_SIZE(dap_chain_datum_token_emission_t, l_emission_size);
-
-        if ( !l_type_256 ) {
-            l_emission->hdr.type_value_256 = false;
-            l_emission->hdr.value = dap_chain_uint256_to(l_emission_value);
-        } else { // 256
-            l_emission->hdr.type_value_256 = true;
-            l_emission->hdr.value_256 = l_emission_value;
-        }
-
         l_emission->hdr.version = 1;
-
         strncpy(l_emission->hdr.ticker, l_ticker, sizeof(l_emission->hdr.ticker) - 1);
+        l_emission->hdr.value = l_emission_value;
         l_emission->hdr.type = DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_AUTH;
         memcpy(&l_emission->hdr.address, l_addr, sizeof(l_emission->hdr.address));
-
         time_t l_time = time(NULL);
         memcpy(&l_emission->hdr.nonce, &l_time, sizeof(time_t));
         // Then add signs
         size_t l_offset = 0;
-
         for(size_t i = 0; i < l_certs_size; i++) {
             dap_sign_t * l_sign = dap_cert_sign(l_certs[i], &l_emission->hdr,
                     sizeof(l_emission->hdr), 0);
@@ -3337,31 +3313,20 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
             DAP_DELETE(l_sign);
         }
 
-        dap_chain_datum_t * l_datum_emission;
-
         // Produce datum
-        if ( !l_type_256 )
-            l_datum_emission = dap_chain_datum_create(DAP_CHAIN_DATUM_TOKEN_EMISSION,
-                    l_emission,
-                    l_emission_size);
-        else // 256
-            l_datum_emission = dap_chain_datum_create(DAP_CHAIN_DATUM_256_TOKEN_EMISSION,
-                    l_emission,
-                    l_emission_size);
-
+        dap_chain_datum_t * l_datum_emission = dap_chain_datum_create(DAP_CHAIN_DATUM_TOKEN_EMISSION,
+                l_emission,
+                l_emission_size);
         size_t l_datum_emission_size = sizeof(l_datum_emission->header) + l_datum_emission->header.data_size;
 
         // Calc token's hash
         //dap_chain_hash_fast_t l_emission_hash;
         dap_hash_fast(l_emission, l_emission_size, &l_emission_hash);
-
         l_emission_hash_str = l_emission_hash_str_new = dap_chain_hash_fast_to_str_new(&l_emission_hash);
         l_emission_hash_str_base58 = dap_enc_base58_encode_hash_to_str(&l_emission_hash);
 
         // Delete token emission
         DAP_DEL_Z(l_emission);
-        //DAP_DEL_Z(l_emission_256); // 256
-
 //    // Calc datum's hash
 //    dap_chain_hash_fast_t l_datum_emission_hash;
 //    dap_hash_fast(l_datum_emission, l_datum_emission_size, (uint8_t*) &l_datum_emission_hash);
@@ -3394,29 +3359,15 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
     dap_chain_datum_tx_t *l_tx = DAP_NEW_Z_SIZE(dap_chain_datum_tx_t, sizeof(dap_chain_datum_tx_t));
     l_tx->header.ts_created = time(NULL);
     dap_chain_hash_fast_t l_tx_prev_hash = { 0 };
-    dap_chain_tx_token_t *l_tx_token;
-    dap_chain_tx_out_t *l_out;
-    //dap_chain_256_tx_out_t *l_out_256;
-    
     // create items
-    if ( !l_type_256 ) {
-        l_tx_token = dap_chain_datum_tx_item_token_create(&l_emission_hash, l_ticker);
-        l_out = dap_chain_datum_tx_item_out_create(l_addr, dap_chain_uint256_to(l_emission_value));
-    } else { // 256
-        l_tx_token = dap_chain_datum_tx_item_256_token_create(&l_emission_hash, l_ticker);
-        l_out = dap_chain_datum_tx_item_256_out_create(l_addr, l_emission_value);
-    }
+    dap_chain_tx_token_t *l_tx_token = dap_chain_datum_tx_item_token_create(&l_emission_hash, l_ticker);
     dap_chain_tx_in_t *l_in = dap_chain_datum_tx_item_in_create(&l_tx_prev_hash, 0);
+    dap_chain_tx_out_t *l_out = dap_chain_datum_tx_item_out_create(l_addr, l_emission_value);
 
     // pack items to transaction
     dap_chain_datum_tx_add_item(&l_tx, (const uint8_t*) l_tx_token);
     dap_chain_datum_tx_add_item(&l_tx, (const uint8_t*) l_in);
-
-    //if ( !l_type_256 ) {
     dap_chain_datum_tx_add_item(&l_tx, (const uint8_t*) l_out);
-    // } else { //256
-    //     dap_chain_datum_tx_add_item(&l_tx, (const uint8_t*) l_out_256);
-    // }
 
     if (l_certs){
         // Sign all that we have with certs
@@ -3435,22 +3386,16 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
 
     DAP_DEL_Z(l_tx_token);
     DAP_DEL_Z(l_in);
-    // DAP_DEL_Z(l_out);
-    // DAP_DEL_Z(l_out_256);
+    DAP_DEL_Z(l_out);
 
     DAP_DEL_Z(l_emission_hash_str_new);
     l_emission_hash_str = NULL;
     DAP_DEL_Z(l_emission_hash_str_base58);
 
     size_t l_tx_size = dap_chain_datum_tx_get_size(l_tx);
-    dap_chain_datum_t * l_datum_tx;
 
     // Pack transaction into the datum
-    if ( !l_type_256 ) {
-        l_datum_tx = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, l_tx, l_tx_size);
-    } else {
-        l_datum_tx = dap_chain_datum_create(DAP_CHAIN_DATUM_256_TX, l_tx, l_tx_size);
-    }
+    dap_chain_datum_t * l_datum_tx = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, l_tx, l_tx_size);
     size_t l_datum_tx_size = dap_chain_datum_size(l_datum_tx);
 
     // use l_tx hash for compatible with utho hash
@@ -3884,10 +3829,6 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
 
     uint64_t value = 0;
     uint64_t value_fee = 0;
-
-    // uint256_t value = uint256_0;
-    // uint256_t value_fee = uint256_0;
-
     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);
diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c
index fa3a9129f68852d0ddd293dbc2d529bfa25e9870..d1b0be0a91eb322e8d222bdeaf39538f8f8e2e11 100644
--- a/modules/net/dap_chain_node_cli_cmd_tx.c
+++ b/modules/net/dap_chain_node_cli_cmd_tx.c
@@ -27,7 +27,6 @@
 #include <pthread.h>
 
 #include "dap_chain_wallet.h"
-#include "dap_chain_cell.h"
 #include "dap_common.h"
 #include "dap_enc_base58.h"
 #include "dap_strfuncs.h"
@@ -117,10 +116,7 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
         l_tx_hash_user_str = dap_strdup(l_tx_hash_str);
     else
         l_tx_hash_user_str = dap_enc_base58_from_hex_str_to_str(l_tx_hash_str);
-    dap_list_t *l_list_tx_any = dap_list_concat(
-                                    dap_chain_datum_tx_items_get(a_datum, TX_ITEM_TYPE_256_TOKEN, NULL),
-                                    dap_chain_datum_tx_items_get(a_datum, TX_ITEM_TYPE_TOKEN, NULL)
-                                );
+    dap_list_t *l_list_tx_any = dap_chain_datum_tx_items_get(a_datum, TX_ITEM_TYPE_TOKEN, NULL);
     if(a_ledger == NULL){
         dap_string_append_printf(a_str_out, "transaction: %s hash: %s\n Items:\n", l_list_tx_any ? "(emit)" : "", l_tx_hash_user_str);
     } else {
@@ -141,9 +137,7 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
     while(l_tx_items_count < l_tx_items_size){
         uint8_t *item = a_datum->tx_items + l_tx_items_count;
         size_t l_item_tx_size = dap_chain_datum_item_tx_get_size(item);
-
-        dap_chain_tx_item_type_t l_type = dap_chain_datum_tx_item_get_type(item);
-        switch(l_type){
+        switch(dap_chain_datum_tx_item_get_type(item)){
         case TX_ITEM_TYPE_IN:
             l_hash_str_tmp = dap_chain_hash_fast_to_str_new(&((dap_chain_tx_in_t*)item)->header.tx_prev_hash);
             dap_string_append_printf(a_str_out, "\t IN:\nTx_prev_hash: %s\n"
@@ -162,32 +156,15 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
                                         ((dap_chain_tx_out_t*)item)->header.value,
                                         dap_chain_addr_to_str(&((dap_chain_tx_out_t*)item)->addr));
             break;
-        case TX_ITEM_TYPE_256_OUT: { // 256
-            dap_string_append_printf(a_str_out, "\t OUT 256_t:\n"
-                                                "\t\t Value: %s (%s)\n"
-                                                "\t\t Address: %s\n",
-                                        dap_chain_balance_to_coins(dap_chain_uint128_from_uint256(
-                                                                       ((dap_chain_tx_out_t*)item)->header.value_256)
-                                                                   ),
-                                        dap_chain_u256tostr(((dap_chain_tx_out_t*)item)->header.value_256),
-                                        dap_chain_addr_to_str(&((dap_chain_tx_out_t*)item)->addr));
-            break;
-        }
-        case TX_ITEM_TYPE_256_TOKEN:
         case TX_ITEM_TYPE_TOKEN:
             l_hash_str_tmp = dap_chain_hash_fast_to_str_new(&((dap_chain_tx_token_t*)item)->header.token_emission_hash);
-            dap_string_append_printf(a_str_out, "\t TOKEN%s:\n"
+            dap_string_append_printf(a_str_out, "\t TOKEN:\n"
                                                 "\t\t ticker: %s \n"
                                                 "\t\t token_emission_hash: %s\n"
-                                                "\t\t token_emission_chain_id: 0x%016"DAP_UINT64_FORMAT_x"\n",
-                                                TX_ITEM_TYPE_256_TOKEN == l_type ? " 256_t " : "",
-                                                ((dap_chain_tx_token_t*)item)->header.ticker,
-                                                l_hash_str_tmp,
-                                                ((dap_chain_tx_token_t*)item)->header.token_emission_chain_id.uint64
-                                            );
+                                                "\t\t token_emission_chain_id: 0x%016"DAP_UINT64_FORMAT_x"\n", ((dap_chain_tx_token_t*)item)->header.ticker, l_hash_str_tmp,
+                                        ((dap_chain_tx_token_t*)item)->header.token_emission_chain_id.uint64);
             DAP_DELETE(l_hash_str_tmp);
             break;
-        case TX_ITEM_TYPE_256_TOKEN_EXT:
         case TX_ITEM_TYPE_TOKEN_EXT:
             l_hash_str_tmp = dap_chain_hash_fast_to_str_new(&((dap_chain_tx_token_ext_t*)item)->header.ext_tx_hash);
             dap_string_append_printf(a_str_out, "\t TOKEN EXT:\n"
@@ -211,55 +188,28 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
                                                 "\t sig_size: %u\n", ((dap_chain_tx_sig_t*)item)->header.sig_size);
             dap_sign_get_information(l_sign_tmp, a_str_out);
             break;
-        case TX_ITEM_TYPE_256_RECEIPT:
         case TX_ITEM_TYPE_RECEIPT:
-            if ( l_type == TX_ITEM_TYPE_256_RECEIPT) // u256_t value_datoshi
-                dap_string_append_printf(a_str_out, "\t Receipt:\n"
-                                                    "\t\t size: %u\n"
-                                                    "\t\t ext size:%u\n"
-                                                    "\t\t Info:"
-                                                    "\t\t\t   units: 0x%016"DAP_UINT64_FORMAT_x"\n"
-                                                    "\t\t\t   uid: 0x%016"DAP_UINT64_FORMAT_x"\n"
-                                                    "\t\t\t   units type: %s \n"
-                                                    "\t\t\t   value: %s (%"DAP_UINT64_FORMAT_U")\n",
-                            ((dap_chain_datum_tx_receipt_t*)item)->size,
-                            ((dap_chain_datum_tx_receipt_t*)item)->exts_size,
-                            ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.units,
-                            ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.srv_uid.uint64,
-                            serv_unit_enum_to_str(
-                                 &((dap_chain_datum_tx_receipt_t*)item)->receipt_info.units_type.enm
-                                 ),
-                             dap_chain_balance_to_coins(
-                                 dap_chain_uint128_from_uint256(
-                                     ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.value_datoshi_256
-                                 )
-                             ),
-                             dap_chain_u256tostr(((dap_chain_datum_tx_receipt_t*)item)->receipt_info.value_datoshi_256)
-                        );
-            else // u64_t value_datoshi
-                dap_string_append_printf(a_str_out, "\t Receipt:\n"
-                                                    "\t\t size: %u\n"
-                                                    "\t\t ext size:%u\n"
-                                                    "\t\t Info:"
-                                                    "\t\t\t   units: 0x%016"DAP_UINT64_FORMAT_x"\n"
-                                                    "\t\t\t   uid: 0x%016"DAP_UINT64_FORMAT_x"\n"
-                                                    "\t\t\t   units type: %s \n"
-                                                    "\t\t\t   value: %s (%"DAP_UINT64_FORMAT_U")\n",
-                            ((dap_chain_datum_tx_receipt_t*)item)->size,
-                            ((dap_chain_datum_tx_receipt_t*)item)->exts_size,
-                            ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.units,
-                            ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.srv_uid.uint64,
-                            serv_unit_enum_to_str(
-                                 &((dap_chain_datum_tx_receipt_t*)item)->receipt_info.units_type.enm
-                                 ),
-                            dap_chain_balance_to_coins(
-                                dap_chain_uint128_from(
-                                    ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.value_datoshi
-                                )
-                            ),
-                            ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.value_datoshi
-                        );
-
+            dap_string_append_printf(a_str_out, "\t Receipt:\n"
+                                                "\t\t size: %u\n"
+                                                "\t\t ext size:%u\n"
+                                                "\t\t Info:"
+                                                "\t\t\t   units: 0x%016"DAP_UINT64_FORMAT_x"\n"
+                                                "\t\t\t   uid: 0x%016"DAP_UINT64_FORMAT_x"\n"
+                                                "\t\t\t   units type: %s \n"
+                                                "\t\t\t   value: %s (%"DAP_UINT64_FORMAT_U")\n",
+                                     ((dap_chain_datum_tx_receipt_t*)item)->size,
+                                     ((dap_chain_datum_tx_receipt_t*)item)->exts_size,
+                                     ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.units,
+                                     ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.srv_uid.uint64,
+                                     serv_unit_enum_to_str(
+                                         &((dap_chain_datum_tx_receipt_t*)item)->receipt_info.units_type.enm
+                                         ),
+                                     dap_chain_balance_to_coins(
+                                         dap_chain_uint128_from(
+                                             ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.value_datoshi
+                                         )
+                                     ),
+                                     ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.value_datoshi);
             if (((dap_chain_datum_tx_receipt_t*)item)->exts_size == sizeof(dap_sign_t) + sizeof(dap_sign_t)){
                 dap_sign_t *l_provider = DAP_NEW_Z(dap_sign_t);
                 memcpy(l_provider, ((dap_chain_datum_tx_receipt_t*)item)->exts_n_signs, sizeof(dap_sign_t));
@@ -367,66 +317,6 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
                 default: break;
             }
             break;
-        case TX_ITEM_TYPE_256_OUT_COND: // 256
-            dap_string_append_printf(a_str_out, "\t OUT 256_t COND:\n"
-                                                "\t Header:\n"
-                                                "\t\t\t ts_expires: %s\t"
-                                                "\t\t\t value: %s (%s)\n"
-                                                "\t\t\t subtype: %s\n"
-                                                "\t\t SubType:\n",
-                                     dap_ctime_r((time_t*)((dap_chain_tx_out_cond_t*)item)->header.ts_expires, l_tmp_buf),
-                                     dap_chain_balance_to_coins(
-                                         dap_chain_uint128_from_uint256(((dap_chain_tx_out_cond_t*)item)->header.value_256)
-                                     ),
-                                     dap_chain_u256tostr(((dap_chain_tx_out_cond_t*)item)->header.value_256),
-                                     dap_chain_tx_out_cond_subtype_to_str(((dap_chain_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_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_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_uint128_from_uint256(
-                                                ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi_256)
-                                                                    ),
-                                         dap_chain_u256tostr(((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi_256)
-                );
-                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_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
-                );
-                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 (%s)\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_balance_to_coins(
-                                             dap_chain_uint128_from_uint256(
-                                                 ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.value_256
-                                                 )
-                                             ),
-                                         dap_chain_u256tostr(((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.value_256)
-                );
-                break;
-            }
-            break;
         case TX_ITEM_TYPE_OUT_EXT:
             dap_string_append_printf(a_str_out, "\t OUT EXT:\n"
                                                 "\t\t Addr: %s\n"
@@ -437,21 +327,7 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
                                      dap_chain_balance_to_coins(dap_chain_uint128_from(
                                                                     ((dap_chain_tx_out_ext_t*)item)->header.value)
                                                                 ),
-                                     ((dap_chain_tx_out_ext_t*)item)->header.value
-                                );
-            break;
-        case TX_ITEM_TYPE_256_OUT_EXT: // 256
-            dap_string_append_printf(a_str_out, "\t OUT 256_t EXT:\n"
-                                                "\t\t Addr: %s\n"
-                                                "\t\t Token: %s\n"
-                                                "\t\t Value: %s (%s)\n",
-                                     dap_chain_addr_to_str(&((dap_chain_tx_out_ext_t*)item)->addr),
-                                     ((dap_chain_tx_out_ext_t*)item)->token,
-                                     dap_chain_balance_to_coins(dap_chain_uint128_from_uint256(
-                                                                    ((dap_chain_tx_out_ext_t*)item)->header.value_256)
-                                                                ),
-                                     dap_chain_u256tostr(((dap_chain_tx_out_ext_t*)item)->header.value_256)
-                                );
+                                     ((dap_chain_tx_out_ext_t*)item)->header.value);
             break;
         default:
             dap_string_append_printf(a_str_out, " This transaction have unknown item type \n");
@@ -509,257 +385,204 @@ char* dap_db_history_tx(dap_chain_hash_fast_t* a_tx_hash, dap_chain_t * a_chain,
 
     bool l_tx_hash_found = false;
     dap_tx_data_t *l_tx_data_hash = NULL;
-    dap_chain_cell_t *l_cell = a_chain->cells;
-    do {
-        // load transactions
-        dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain, l_cell->id);
-        size_t l_atom_size = 0;
-        dap_chain_atom_ptr_t l_atom = a_chain->callback_atom_iter_get_first(l_atom_iter, &l_atom_size);
-
-        while(l_atom && l_atom_size) {
-            dap_chain_datum_t *l_datum = (dap_chain_datum_t*) l_atom;
-            if(!l_datum && (l_datum->header.type_id != DAP_CHAIN_DATUM_TX && l_datum->header.type_id != DAP_CHAIN_DATUM_256_TX ) ) {
-                // go to next transaction
-                l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size);
-                continue;
-            }
-
-            bool l_type_256 = false;
-
-            if ( l_datum->header.type_id == DAP_CHAIN_DATUM_256_TX )
-                l_type_256 = true;
-
-            dap_tx_data_t *l_tx_data = NULL;
-
-            // transaction
-            dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*) l_datum->data;
-
-            // find Token items - present in emit transaction
-            // dap_list_t *l_list_tx_token = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_TOKEN, NULL);
-
-            dap_list_t *l_list_tx_token;
-            if ( l_type_256 ) // 256
-                l_list_tx_token =  dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_256_TOKEN, NULL);
-            else
-                l_list_tx_token = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_TOKEN, NULL);
-
-            // find OUT items
-            // dap_list_t *l_list_out_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_OUT, NULL);
-
-            dap_list_t *l_list_out_items;
-            if ( l_type_256 ) // 256
-                l_list_out_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_256_OUT, NULL);
-            else
-                l_list_out_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_OUT, NULL);
-
-            dap_list_t *l_list_tmp = l_list_out_items;
-            while(l_list_tmp) {
-
-                // const dap_chain_256_tx_out_t *l_tx_out_256  = (const dap_chain_256_tx_out_t*) l_list_tmp->data;
-                const dap_chain_tx_out_t *l_tx_out = (const dap_chain_tx_out_t*) l_list_tmp->data;
+    // load transactions
+    dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain);
+    size_t l_atom_size = 0;
+    dap_chain_atom_ptr_t l_atom = a_chain->callback_atom_iter_get_first(l_atom_iter, &l_atom_size);
 
-                // save OUT item l_tx_out - only for first OUT item
-                if(!l_tx_data)
-                {
-                    // save tx hash
-                    l_tx_data = DAP_NEW_Z(dap_tx_data_t);
-                    dap_chain_hash_fast_t l_tx_hash;
-                    dap_hash_fast(l_tx, dap_chain_datum_tx_get_size(l_tx), &l_tx_hash);
-                    memcpy(&l_tx_data->tx_hash, &l_tx_hash, sizeof(dap_chain_hash_fast_t));
-                    // if ( l_type_256 ) // 256
-                    //     memcpy(&l_tx_data->addr, &l_tx_out->addr, sizeof(dap_chain_addr_t));
-                    // else
-                    memcpy(&l_tx_data->addr, &l_tx_out->addr, sizeof(dap_chain_addr_t));
+    while(l_atom && l_atom_size) {
+        dap_chain_datum_t *l_datum = (dap_chain_datum_t*) l_atom;
+        if(!l_datum && l_datum->header.type_id != DAP_CHAIN_DATUM_TX) {
+            // go to next transaction
+            l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size);
+            continue;
+        }
+        dap_tx_data_t *l_tx_data = NULL;
+
+        // transaction
+        dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*) l_datum->data;
+
+        // find Token items - present in emit transaction
+        dap_list_t *l_list_tx_token = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_TOKEN, NULL);
+
+        // find OUT items
+        dap_list_t *l_list_out_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_OUT, NULL);
+        dap_list_t *l_list_tmp = l_list_out_items;
+        while(l_list_tmp) {
+            const dap_chain_tx_out_t *l_tx_out = (const dap_chain_tx_out_t*) l_list_tmp->data;
+            // save OUT item l_tx_out - only for first OUT item
+            if(!l_tx_data)
+            {
+                // save tx hash
+                l_tx_data = DAP_NEW_Z(dap_tx_data_t);
+                dap_chain_hash_fast_t l_tx_hash;
+                dap_hash_fast(l_tx, dap_chain_datum_tx_get_size(l_tx), &l_tx_hash);
+                memcpy(&l_tx_data->tx_hash, &l_tx_hash, sizeof(dap_chain_hash_fast_t));
+                memcpy(&l_tx_data->addr, &l_tx_out->addr, sizeof(dap_chain_addr_t));
+                dap_chain_hash_fast_to_str(&l_tx_data->tx_hash, l_tx_data->tx_hash_str,
+                        sizeof(l_tx_data->tx_hash_str));
+                //l_tx_data->pos_num = l_count;
+                //l_tx_data->datum = l_datum;
+                l_tx_data->datum = DAP_NEW_SIZE(dap_chain_datum_t, l_atom_size);
+                memcpy(l_tx_data->datum, l_datum, l_atom_size);
+                // save token name
+                if(l_list_tx_token) {
+                    dap_chain_tx_token_t *tk = l_list_tx_token->data;
+                    memcpy(l_tx_data->token_ticker, tk->header.ticker, sizeof(l_tx_data->token_ticker));
+                }
+                // take token from prev out item
+                else {
 
-                    dap_chain_hash_fast_to_str(&l_tx_data->tx_hash, l_tx_data->tx_hash_str,
-                            sizeof(l_tx_data->tx_hash_str));
-                    //l_tx_data->pos_num = l_count;
-                    //l_tx_data->datum = l_datum;
-                    l_tx_data->datum = DAP_NEW_SIZE(dap_chain_datum_t, l_atom_size);
-                    memcpy(l_tx_data->datum, l_datum, l_atom_size);
-                    // save token name
-                    if(l_list_tx_token) {
-                        dap_chain_tx_token_t *tk = l_list_tx_token->data;
-                        memcpy(l_tx_data->token_ticker, tk->header.ticker, sizeof(l_tx_data->token_ticker));
-                    }
-                    // take token from prev out item
-                    else {
+                    // find IN items
+                    dap_list_t *l_list_in_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_IN, NULL);
+                    dap_list_t *l_list_tmp_in = l_list_in_items;
+                    // find token_ticker in prev OUT items
+                    while(l_list_tmp_in) {
+                        const dap_chain_tx_in_t *l_tx_in =
+                                (const dap_chain_tx_in_t*) l_list_tmp_in->data;
+                        dap_chain_hash_fast_t tx_prev_hash = l_tx_in->header.tx_prev_hash;
 
-                        // find IN items
-                        dap_list_t *l_list_in_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_IN, NULL);
-                        dap_list_t *l_list_tmp_in = l_list_in_items;
-                        // find token_ticker in prev OUT items
-                        while(l_list_tmp_in) {
-                            const dap_chain_tx_in_t *l_tx_in =
-                                    (const dap_chain_tx_in_t*) l_list_tmp_in->data;
-                            dap_chain_hash_fast_t tx_prev_hash = l_tx_in->header.tx_prev_hash;
-
-                            //find prev OUT item
-                            dap_tx_data_t *l_tx_data_prev = NULL;
-                            HASH_FIND(hh, l_tx_data_hash, &tx_prev_hash, sizeof(dap_chain_hash_fast_t),
-                                    l_tx_data_prev);
-                            if(l_tx_data_prev != NULL) {
-                                // fill token in l_tx_data from prev transaction
-                                if(l_tx_data) {
-                                    // get token from prev tx
-                                    memcpy(l_tx_data->token_ticker, l_tx_data_prev->token_ticker,
-                                            sizeof(l_tx_data->token_ticker));
-                                    break;
-                                }
-                                l_list_tmp_in = dap_list_next(l_list_tmp_in);
+                        //find prev OUT item
+                        dap_tx_data_t *l_tx_data_prev = NULL;
+                        HASH_FIND(hh, l_tx_data_hash, &tx_prev_hash, sizeof(dap_chain_hash_fast_t),
+                                l_tx_data_prev);
+                        if(l_tx_data_prev != NULL) {
+                            // fill token in l_tx_data from prev transaction
+                            if(l_tx_data) {
+                                // get token from prev tx
+                                memcpy(l_tx_data->token_ticker, l_tx_data_prev->token_ticker,
+                                        sizeof(l_tx_data->token_ticker));
+                                break;
                             }
+                            l_list_tmp_in = dap_list_next(l_list_tmp_in);
                         }
-                        if(l_list_in_items)
-                            dap_list_free(l_list_in_items);
                     }
-                    HASH_ADD(hh, l_tx_data_hash, tx_hash, sizeof(dap_chain_hash_fast_t), l_tx_data);
+                    if(l_list_in_items)
+                        dap_list_free(l_list_in_items);
                 }
-                l_list_tmp = dap_list_next(l_list_tmp);
+                HASH_ADD(hh, l_tx_data_hash, tx_hash, sizeof(dap_chain_hash_fast_t), l_tx_data);
             }
-            if(l_list_out_items)
-                dap_list_free(l_list_out_items);
+            l_list_tmp = dap_list_next(l_list_tmp);
+        }
+        if(l_list_out_items)
+            dap_list_free(l_list_out_items);
 
-            // calc hash
-            dap_chain_hash_fast_t l_tx_hash;
-            dap_hash_fast(l_tx, dap_chain_datum_tx_get_size(l_tx), &l_tx_hash);
-            // search tx with a_tx_hash
-            if(!dap_hash_fast_compare(a_tx_hash, &l_tx_hash)) {
-                // go to next transaction
-                l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size);
-                continue;
-            }
-            // found a_tx_hash now
+        // calc hash
+        dap_chain_hash_fast_t l_tx_hash;
+        dap_hash_fast(l_tx, dap_chain_datum_tx_get_size(l_tx), &l_tx_hash);
+        // search tx with a_tx_hash
+        if(!dap_hash_fast_compare(a_tx_hash, &l_tx_hash)) {
+            // go to next transaction
+            l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size);
+            continue;
+        }
+        // found a_tx_hash now
+
+        // transaction time
+        if(l_tx->header.ts_created > 0) {
+            time_t rawtime = (time_t) l_tx->header.ts_created;
+            struct tm l_timeinfo = {0};
+            localtime_r(&rawtime, &l_timeinfo);
+            dap_string_append_printf(l_str_out, " %s", asctime(&l_timeinfo));
+        }
 
-            // transaction time
-            if(l_tx->header.ts_created > 0) {
-                time_t rawtime = (time_t) l_tx->header.ts_created;
-                struct tm l_timeinfo = {0};
-                localtime_r(&rawtime, &l_timeinfo);
-                dap_string_append_printf(l_str_out, " %s", asctime(&l_timeinfo));
+        // find all OUT items in transaction
+        l_list_out_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_OUT, NULL);
+        l_list_tmp = l_list_out_items;
+        while(l_list_tmp) {
+            const dap_chain_tx_out_t *l_tx_out = (const dap_chain_tx_out_t*) l_list_tmp->data;
+            //dap_tx_data_t *l_tx_data_prev = NULL;
+
+            const char *l_token_str = NULL;
+            if(l_tx_data)
+                l_token_str = l_tx_data->token_ticker;
+            char *l_dst_to_str =
+                    (l_tx_out) ? dap_chain_addr_to_str(&l_tx_out->addr) :
+                    NULL;
+            if(l_tx_out)
+                dap_string_append_printf(l_str_out, " OUT item %"DAP_UINT64_FORMAT_U" %s to %s\n",
+                    l_tx_out->header.value,
+                    dap_strlen(l_token_str) > 0 ? l_token_str : "?",
+                    l_dst_to_str ? l_dst_to_str : "?"
+                                   );
+            DAP_DELETE(l_dst_to_str);
+            l_list_tmp = dap_list_next(l_list_tmp);
+        }
+        // find all IN items in transaction
+        dap_list_t *l_list_in_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_IN, NULL);
+        l_list_tmp = l_list_in_items;
+        // find cur addr in prev OUT items
+        while(l_list_tmp) {
+            const dap_chain_tx_in_t *l_tx_in = (const dap_chain_tx_in_t*) l_list_tmp->data;
+            dap_chain_hash_fast_t tx_prev_hash = l_tx_in->header.tx_prev_hash;
+            char l_tx_hash_str[70];
+            char *tx_hash_base58_str = NULL;
+            if(!dap_hash_fast_is_blank(&tx_prev_hash)){
+                tx_hash_base58_str = dap_enc_base58_from_hex_str_to_str( l_tx_data->tx_hash_str);
+                dap_chain_hash_fast_to_str(&tx_prev_hash, l_tx_hash_str, sizeof(l_tx_hash_str));
             }
-
-            // find all OUT items in transaction
-            if ( l_type_256 )
-                l_list_out_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_256_OUT, NULL);
-            else
-                l_list_out_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_OUT, NULL);
-            l_list_tmp = l_list_out_items;
-            while(l_list_tmp) {
-                // const dap_chain_256_tx_out_t *l_tx_out_256 = (const dap_chain_256_tx_out_t*) l_list_tmp->data;
-                const dap_chain_tx_out_t *l_tx_out = (const dap_chain_tx_out_t*) l_list_tmp->data;
-                //dap_tx_data_t *l_tx_data_prev = NULL;
-
-                const char *l_token_str = NULL;
-                if(l_tx_data)
-                    l_token_str = l_tx_data->token_ticker;
-                char *l_dst_to_str =
-                        (l_tx_out) ? dap_chain_addr_to_str(&l_tx_out->addr) : NULL;
-
-                if(l_tx_out) {
-                    if ( l_type_256 ) // 256
-                        dap_string_append_printf(l_str_out, " OUT 256_t item %s %s to %s\n",
-                            dap_chain_u256tostr(l_tx_out->header.value_256),
-                            dap_strlen(l_token_str) > 0 ? l_token_str : "?",
-                            l_dst_to_str ? l_dst_to_str : "?"
-                        );
-                    else
-                        dap_string_append_printf(l_str_out, " OUT item %"DAP_UINT64_FORMAT_U" %s to %s\n",
-                            l_tx_out->header.value,
-                            dap_strlen(l_token_str) > 0 ? l_token_str : "?",
-                            l_dst_to_str ? l_dst_to_str : "?"
-                        );
-                }
-                DAP_DELETE(l_dst_to_str);
-                l_list_tmp = dap_list_next(l_list_tmp);
+            else{
+                strcpy(l_tx_hash_str, "Null");
+                tx_hash_base58_str = dap_strdup("Null");
             }
-            // find all IN items in transaction
-            dap_list_t *l_list_in_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_IN, NULL);
-            l_list_tmp = l_list_in_items;
-            // find cur addr in prev OUT items
-            while(l_list_tmp) {
-                const dap_chain_tx_in_t *l_tx_in = (const dap_chain_tx_in_t*) l_list_tmp->data;
-                dap_chain_hash_fast_t tx_prev_hash = l_tx_in->header.tx_prev_hash;
-                char l_tx_hash_str[70];
-                char *tx_hash_base58_str = NULL;
-                if(!dap_hash_fast_is_blank(&tx_prev_hash)){
-                    tx_hash_base58_str = dap_enc_base58_from_hex_str_to_str( l_tx_data->tx_hash_str);
-                    dap_chain_hash_fast_to_str(&tx_prev_hash, l_tx_hash_str, sizeof(l_tx_hash_str));
-                }
-                else{
-                    strcpy(l_tx_hash_str, "Null");
-                    tx_hash_base58_str = dap_strdup("Null");
-                }
-                if(!dap_strcmp(a_hash_out_type,"hex"))
-                    dap_string_append_printf(l_str_out, " IN item \n  prev tx_hash %s\n", l_tx_hash_str);
-                else
-                    dap_string_append_printf(l_str_out, " IN item \n  prev tx_hash %s\n", tx_hash_base58_str);
-                DAP_DELETE(tx_hash_base58_str);
-
-                //find prev OUT item
-                dap_tx_data_t *l_tx_data_prev = NULL;
-                HASH_FIND(hh, l_tx_data_hash, &tx_prev_hash, sizeof(dap_chain_hash_fast_t), l_tx_data_prev);
-                if(l_tx_data_prev != NULL) {
-
-                    dap_chain_datum_t *l_datum_prev = get_prev_tx(l_tx_data_prev);
-                    dap_chain_datum_tx_t *l_tx_prev =
-                            l_datum_prev ? (dap_chain_datum_tx_t*) l_datum_prev->data : NULL;
-
-                    if ( l_type_256 ) { // 256
-                        // find OUT items in prev datum
-                        dap_list_t *l_list_out_prev_items = dap_chain_datum_tx_items_get(l_tx_prev,
-                                TX_ITEM_TYPE_256_OUT, NULL);
-                        // find OUT item for IN item;
-                        dap_list_t *l_list_out_prev_item = dap_list_nth(l_list_out_prev_items,
-                                l_tx_in->header.tx_out_prev_idx);
-                        dap_chain_tx_out_t *l_tx_prev_out =
-                                l_list_out_prev_item ? (dap_chain_tx_out_t*)l_list_out_prev_item->data :
-                                                       NULL;
-                        // print value from prev out item
-                        dap_string_append_printf(l_str_out, "  prev OUT 256_t item value=%s",
-                                l_tx_prev_out ? dap_chain_u256tostr(l_tx_prev_out->header.value_256) : "0");
-                    } else {
-                        dap_list_t *l_list_out_prev_items = dap_chain_datum_tx_items_get(l_tx_prev,
-                                TX_ITEM_TYPE_OUT, NULL);
-                        dap_list_t *l_list_out_prev_item = dap_list_nth(l_list_out_prev_items,
-                                l_tx_in->header.tx_out_prev_idx);
-                        dap_chain_tx_out_t *l_tx_prev_out =
-                                l_list_out_prev_item ? (dap_chain_tx_out_t*)l_list_out_prev_item->data :
-                                                       NULL;
-                        dap_string_append_printf(l_str_out, "  prev OUT item value=%"DAP_UINT64_FORMAT_U,
-                                l_tx_prev_out ? l_tx_prev_out->header.value : 0);
-                    }
-                }
-                dap_string_append_printf(l_str_out, "\n");
-                l_list_tmp = dap_list_next(l_list_tmp);
+            if(!dap_strcmp(a_hash_out_type,"hex"))
+                dap_string_append_printf(l_str_out, " IN item \n  prev tx_hash %s\n", l_tx_hash_str);
+            else
+                dap_string_append_printf(l_str_out, " IN item \n  prev tx_hash %s\n", tx_hash_base58_str);
+            DAP_DELETE(tx_hash_base58_str);
+
+            //find prev OUT item
+            dap_tx_data_t *l_tx_data_prev = NULL;
+            HASH_FIND(hh, l_tx_data_hash, &tx_prev_hash, sizeof(dap_chain_hash_fast_t), l_tx_data_prev);
+            if(l_tx_data_prev != NULL) {
+
+                dap_chain_datum_t *l_datum_prev = get_prev_tx(l_tx_data_prev);
+                dap_chain_datum_tx_t *l_tx_prev =
+                        l_datum_prev ? (dap_chain_datum_tx_t*) l_datum_prev->data : NULL;
+
+                // find OUT items in prev datum
+                dap_list_t *l_list_out_prev_items = dap_chain_datum_tx_items_get(l_tx_prev,
+                        TX_ITEM_TYPE_OUT, NULL);
+                // find OUT item for IN item;
+                dap_list_t *l_list_out_prev_item = dap_list_nth(l_list_out_prev_items,
+                        l_tx_in->header.tx_out_prev_idx);
+                dap_chain_tx_out_t *l_tx_prev_out =
+                        l_list_out_prev_item ?
+                                               (dap_chain_tx_out_t*) l_list_out_prev_item->data :
+                                               NULL;
+                // print value from prev out item
+                dap_string_append_printf(l_str_out, "  prev OUT item value=%"DAP_UINT64_FORMAT_U,
+                        l_tx_prev_out ? l_tx_prev_out->header.value : 0);
             }
-
-            if(l_list_tx_token)
-                dap_list_free(l_list_tx_token);
-            if(l_list_out_items)
-                dap_list_free(l_list_out_items);
-            if(l_list_in_items)
-                dap_list_free(l_list_in_items);
-            l_tx_hash_found = true;
-            break;
-
-            // go to next transaction
-            //l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter);
-            //l_atom_size = a_chain->callback_atom_get_size(l_atom);
-        }
-        a_chain->callback_atom_iter_delete(l_atom_iter);
-
-        // delete hashes
-        dap_tx_data_t *l_iter_current, *l_item_tmp;
-        HASH_ITER(hh, l_tx_data_hash , l_iter_current, l_item_tmp)
-        {
-            HASH_DEL(l_tx_data_hash, l_iter_current);
-            // delete datum
-            DAP_DELETE(l_iter_current->datum);
-            // delete struct
-            DAP_DELETE(l_iter_current);
+            dap_string_append_printf(l_str_out, "\n");
+            l_list_tmp = dap_list_next(l_list_tmp);
         }
-        l_cell = l_cell->hh.next;
-    } while (l_cell);
+
+        if(l_list_tx_token)
+            dap_list_free(l_list_tx_token);
+        if(l_list_out_items)
+            dap_list_free(l_list_out_items);
+        if(l_list_in_items)
+            dap_list_free(l_list_in_items);
+        l_tx_hash_found = true;
+        break;
+
+        // go to next transaction
+        //l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter);
+        //l_atom_size = a_chain->callback_atom_get_size(l_atom);
+    }
+    a_chain->callback_atom_iter_delete(l_atom_iter);
+
+    // delete hashes
+    dap_tx_data_t *l_iter_current, *l_item_tmp;
+    HASH_ITER(hh, l_tx_data_hash , l_iter_current, l_item_tmp)
+    {
+        HASH_DEL(l_tx_data_hash, l_iter_current);
+        // delete datum
+        DAP_DELETE(l_iter_current->datum);
+        // delete struct
+        DAP_DELETE(l_iter_current);
+    }
 
     // if no history
     if(!l_str_out->len)
@@ -783,140 +606,185 @@ char* dap_db_history_addr(dap_chain_addr_t * a_addr, dap_chain_t * a_chain, cons
     dap_string_t *l_str_out = dap_string_new(NULL);
 
     dap_tx_data_t *l_tx_data_hash = NULL;
-    dap_chain_cell_t *l_cell = a_chain->cells;
-    do {
-        // load transactions
-        dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain, l_cell->id);
-        size_t l_atom_size=0;
-        dap_chain_atom_ptr_t l_atom = a_chain->callback_atom_iter_get_first(l_atom_iter, &l_atom_size);
-        if (!l_atom) {
-            return NULL;
+    // load transactions
+    dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain);
+    size_t l_atom_size=0;
+    dap_chain_atom_ptr_t l_atom = a_chain->callback_atom_iter_get_first(l_atom_iter, &l_atom_size);
+    if (!l_atom) {
+        return NULL;
+    }
+
+    while(l_atom && l_atom_size) {
+        size_t l_datums_count =0;
+        dap_chain_datum_t **l_datums = a_chain->callback_atom_get_datums ? a_chain->callback_atom_get_datums(l_atom, l_atom_size, &l_datums_count) :
+                                                                          NULL;
+        if (! l_datums){
+            log_it(L_WARNING,"Not defined callback_atom_get_datums for chain \"%s\"", a_chain->name);
+            break;
         }
 
-        while(l_atom && l_atom_size) {
-            size_t l_datums_count =0;
-            dap_chain_datum_t **l_datums = a_chain->callback_atom_get_datums ? a_chain->callback_atom_get_datums(l_atom, l_atom_size, &l_datums_count) :
-                                                                              NULL;
-            if (! l_datums){
-                log_it(L_WARNING,"Not defined callback_atom_get_datums for chain \"%s\"", a_chain->name);
-                break;
+        for (size_t d=0; d< l_datums_count; d++){
+            dap_chain_datum_t *l_datum = l_datums && l_datums_count ? l_datums[d] :NULL;
+            if(!l_datum || l_datum->header.type_id != DAP_CHAIN_DATUM_TX) {
+                // go to next transaction
+                l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size);
+                continue;
             }
-
-            for (size_t d=0; d< l_datums_count; d++){
-                dap_chain_datum_t *l_datum = l_datums && l_datums_count ? l_datums[d] :NULL;
-                if(!l_datum || l_datum->header.type_id != DAP_CHAIN_DATUM_TX) {
-                    // go to next transaction
-                    l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size);
-                    continue;
+            // transaction
+            dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*) l_datum->data;
+            dap_list_t *l_records_out = NULL;
+            // transaction time
+            char *l_time_str = NULL;
+            {
+                if(l_tx->header.ts_created > 0) {
+                    time_t rawtime = (time_t) l_tx->header.ts_created;
+                    struct tm * timeinfo;
+                    timeinfo = localtime(&rawtime);
+                    if(timeinfo)
+                        l_time_str = dap_strdup(asctime(timeinfo));
                 }
-                // transaction
-                dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*) l_datum->data;
-                dap_list_t *l_records_out = NULL;
-                // transaction time
-                char *l_time_str = NULL;
+                else
+                    l_time_str = dap_strdup(" ");
+            }
+
+            // find Token items - present in emit transaction
+            dap_list_t *l_list_tx_token = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_TOKEN, NULL);
+
+            // list of dap_tx_data_t*; info about OUT item in current transaction
+            dap_list_t *l_list_out_info = NULL;
+
+            // find OUT items
+            dap_list_t *l_list_out_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_OUT, NULL);
+            dap_list_t *l_list_out_items_tmp = l_list_out_items;
+            while(l_list_out_items_tmp) {
+                const dap_chain_tx_out_t *l_tx_out = (const dap_chain_tx_out_t*) l_list_out_items_tmp->data;
+                // save OUT item l_tx_out
                 {
-                    if(l_tx->header.ts_created > 0) {
-                        time_t rawtime = (time_t) l_tx->header.ts_created;
-                        struct tm * timeinfo;
-                        timeinfo = localtime(&rawtime);
-                        if(timeinfo)
-                            l_time_str = dap_strdup(asctime(timeinfo));
+                    // save tx hash
+                    // info about OUT item in current transaction
+                    dap_tx_data_t *l_tx_data = DAP_NEW_Z(dap_tx_data_t);
+                    dap_chain_hash_fast_t l_tx_hash;
+                    dap_hash_fast(l_tx, dap_chain_datum_tx_get_size(l_tx), &l_tx_hash);
+                    memcpy(&l_tx_data->tx_hash, &l_tx_hash, sizeof(dap_chain_hash_fast_t));
+                    memcpy(&l_tx_data->addr, &l_tx_out->addr, sizeof(dap_chain_addr_t));
+                    dap_chain_hash_fast_to_str(&l_tx_data->tx_hash, l_tx_data->tx_hash_str, sizeof(l_tx_data->tx_hash_str));
+                    l_tx_data->datum = DAP_NEW_SIZE(dap_chain_datum_t, l_atom_size);
+                    memcpy(l_tx_data->datum, l_datum, l_atom_size);
+                    // save token name
+                    if(l_tx_data && l_list_tx_token) {
+                        dap_chain_tx_token_t *tk = l_list_tx_token->data;
+                        memcpy(l_tx_data->token_ticker, tk->header.ticker, sizeof(l_tx_data->token_ticker));
                     }
-                    else
-                        l_time_str = dap_strdup(" ");
+                    HASH_ADD(hh, l_tx_data_hash, tx_hash, sizeof(dap_chain_hash_fast_t), l_tx_data);
+
+                    // save OUT items to list
+                    l_records_out = dap_list_append(l_records_out, (void*) l_tx_out);
+                    // save info about OUT items to list
+                    l_list_out_info = dap_list_append(l_list_out_info, (void*) l_tx_data);
                 }
+                l_list_out_items_tmp = dap_list_next(l_list_out_items_tmp);
+            }
 
-                // find Token items - present in emit transaction
-                dap_list_t *l_list_tx_token = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_TOKEN, NULL);
-
-                // list of dap_tx_data_t*; info about OUT item in current transaction
-                dap_list_t *l_list_out_info = NULL;
-
-                // find OUT items
-                dap_list_t *l_list_out_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_OUT, NULL);
-                dap_list_t *l_list_out_items_tmp = l_list_out_items;
-                while(l_list_out_items_tmp) {
-                    const dap_chain_tx_out_t *l_tx_out = (const dap_chain_tx_out_t*) l_list_out_items_tmp->data;
-                    // save OUT item l_tx_out
-                    {
-                        // save tx hash
-                        // info about OUT item in current transaction
-                        dap_tx_data_t *l_tx_data = DAP_NEW_Z(dap_tx_data_t);
-                        dap_chain_hash_fast_t l_tx_hash;
-                        dap_hash_fast(l_tx, dap_chain_datum_tx_get_size(l_tx), &l_tx_hash);
-                        memcpy(&l_tx_data->tx_hash, &l_tx_hash, sizeof(dap_chain_hash_fast_t));
-                        memcpy(&l_tx_data->addr, &l_tx_out->addr, sizeof(dap_chain_addr_t));
-                        dap_chain_hash_fast_to_str(&l_tx_data->tx_hash, l_tx_data->tx_hash_str, sizeof(l_tx_data->tx_hash_str));
-                        l_tx_data->datum = DAP_NEW_SIZE(dap_chain_datum_t, l_atom_size);
-                        memcpy(l_tx_data->datum, l_datum, l_atom_size);
-                        // save token name
-                        if(l_tx_data && l_list_tx_token) {
-                            dap_chain_tx_token_t *tk = l_list_tx_token->data;
-                            memcpy(l_tx_data->token_ticker, tk->header.ticker, sizeof(l_tx_data->token_ticker));
-                        }
-                        HASH_ADD(hh, l_tx_data_hash, tx_hash, sizeof(dap_chain_hash_fast_t), l_tx_data);
+            // find IN items
+            dap_list_t *l_list_in_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_IN, NULL);
+            dap_list_t *l_list_in_items_tmp = l_list_in_items;
+            // find cur addr in prev OUT items
+            //bool l_is_use_all_cur_out = false;
+            {
+                while(l_list_in_items_tmp) {
+                    const dap_chain_tx_in_t *l_tx_in = (const dap_chain_tx_in_t*) l_list_in_items_tmp->data;
+                    dap_chain_hash_fast_t tx_prev_hash = l_tx_in->header.tx_prev_hash;
+
+                    //find prev OUT item
+                    dap_tx_data_t *l_tx_data_prev = NULL;
+                    HASH_FIND(hh, l_tx_data_hash, &tx_prev_hash, sizeof(dap_chain_hash_fast_t), l_tx_data_prev);
+                    if(l_tx_data_prev != NULL) {
+                        // fill token in all l_tx_data from prev transaction
+
+                        dap_list_t *l_list_out_info_tmp = l_list_out_info;
+                        while(l_list_out_info_tmp) {
+                            dap_tx_data_t *l_tx_data = (dap_tx_data_t*) l_list_out_info_tmp->data;
+                            if(l_tx_data) {
+                                // get token from prev tx
+                                memcpy(l_tx_data->token_ticker, l_tx_data_prev->token_ticker,
+                                        sizeof(l_tx_data->token_ticker));
+                                dap_chain_datum_t *l_datum_prev = get_prev_tx(l_tx_data_prev);
+                                dap_chain_datum_tx_t *l_tx_prev =
+                                        l_datum_prev ? (dap_chain_datum_tx_t*) l_datum_prev->data : NULL;
+
+                                // find OUT items in prev datum
+                                dap_list_t *l_list_out_prev_items = dap_chain_datum_tx_items_get(l_tx_prev,
+                                        TX_ITEM_TYPE_OUT, NULL);
+                                // find OUT item for IN item;
+                                dap_list_t *l_list_out_prev_item = dap_list_nth(l_list_out_prev_items,
+                                        l_tx_in->header.tx_out_prev_idx);
+                                dap_chain_tx_out_t *l_tx_prev_out =
+                                        l_list_out_prev_item ?
+                                                               (dap_chain_tx_out_t*) l_list_out_prev_item->data :
+                                                               NULL;
+                                if(l_tx_prev_out && !memcmp(&l_tx_prev_out->addr, a_addr, sizeof(dap_chain_addr_t)))
+                                    l_tx_data->is_use_all_cur_out = true;
 
-                        // save OUT items to list
-                        l_records_out = dap_list_append(l_records_out, (void*) l_tx_out);
-                        // save info about OUT items to list
-                        l_list_out_info = dap_list_append(l_list_out_info, (void*) l_tx_data);
+                            }
+                            l_list_out_info_tmp = dap_list_next(l_list_out_info_tmp);
+                        }
                     }
-                    l_list_out_items_tmp = dap_list_next(l_list_out_items_tmp);
+                    l_list_in_items_tmp = dap_list_next(l_list_in_items_tmp);
                 }
+                // find prev OUT items for IN items
+                dap_list_t *l_list_in_items2_tmp = l_list_in_items; // go to begin of list
+                while(l_list_in_items2_tmp) {
+                    const dap_chain_tx_in_t *l_tx_in = (const dap_chain_tx_in_t*) l_list_in_items2_tmp->data;
+                    dap_chain_hash_fast_t tx_prev_hash = l_tx_in->header.tx_prev_hash;
+                    // if first transaction - empty prev OUT item
+                    if(dap_hash_fast_is_blank(&tx_prev_hash)) {
+
+                        dap_tx_data_t *l_tx_data = NULL;
+                        dap_list_t *l_list_out_info_tmp = l_list_out_info;
+                        while(l_list_out_info_tmp) {
+                            l_tx_data = (dap_tx_data_t*) l_list_out_info_tmp->data;
+                            if(l_tx_data->token_ticker[0])
+                                break;
+                            l_list_out_info_tmp = dap_list_next(l_list_out_info_tmp);
+                        }
 
-                // find IN items
-                dap_list_t *l_list_in_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_IN, NULL);
-                dap_list_t *l_list_in_items_tmp = l_list_in_items;
-                // find cur addr in prev OUT items
-                //bool l_is_use_all_cur_out = false;
-                {
-                    while(l_list_in_items_tmp) {
-                        const dap_chain_tx_in_t *l_tx_in = (const dap_chain_tx_in_t*) l_list_in_items_tmp->data;
-                        dap_chain_hash_fast_t tx_prev_hash = l_tx_in->header.tx_prev_hash;
-
-                        //find prev OUT item
-                        dap_tx_data_t *l_tx_data_prev = NULL;
-                        HASH_FIND(hh, l_tx_data_hash, &tx_prev_hash, sizeof(dap_chain_hash_fast_t), l_tx_data_prev);
-                        if(l_tx_data_prev != NULL) {
-                            // fill token in all l_tx_data from prev transaction
-
-                            dap_list_t *l_list_out_info_tmp = l_list_out_info;
-                            while(l_list_out_info_tmp) {
-                                dap_tx_data_t *l_tx_data = (dap_tx_data_t*) l_list_out_info_tmp->data;
-                                if(l_tx_data) {
-                                    // get token from prev tx
-                                    memcpy(l_tx_data->token_ticker, l_tx_data_prev->token_ticker,
-                                            sizeof(l_tx_data->token_ticker));
-                                    dap_chain_datum_t *l_datum_prev = get_prev_tx(l_tx_data_prev);
-                                    dap_chain_datum_tx_t *l_tx_prev =
-                                            l_datum_prev ? (dap_chain_datum_tx_t*) l_datum_prev->data : NULL;
-
-                                    // find OUT items in prev datum
-                                    dap_list_t *l_list_out_prev_items = dap_chain_datum_tx_items_get(l_tx_prev,
-                                            TX_ITEM_TYPE_OUT, NULL);
-                                    // find OUT item for IN item;
-                                    dap_list_t *l_list_out_prev_item = dap_list_nth(l_list_out_prev_items,
-                                            l_tx_in->header.tx_out_prev_idx);
-                                    dap_chain_tx_out_t *l_tx_prev_out =
-                                            l_list_out_prev_item ?
-                                                                   (dap_chain_tx_out_t*) l_list_out_prev_item->data :
-                                                                   NULL;
-                                    if(l_tx_prev_out && !memcmp(&l_tx_prev_out->addr, a_addr, sizeof(dap_chain_addr_t)))
-                                        l_tx_data->is_use_all_cur_out = true;
-
+                        // add emit info to ret string
+                        if(l_tx_data && !memcmp(&l_tx_data->addr, a_addr, sizeof(dap_chain_addr_t))) {
+                            dap_list_t *l_records_tmp = l_records_out;
+                            while(l_records_tmp) {
+                                char *tx_hash_str;
+                                if(!dap_strcmp(a_hash_out_type,"hex"))
+                                    tx_hash_str = dap_strdup( l_tx_data->tx_hash_str);
+                                else
+                                    tx_hash_str = dap_enc_base58_from_hex_str_to_str( l_tx_data->tx_hash_str);
+                                const dap_chain_tx_out_t *l_tx_out = (const dap_chain_tx_out_t*) l_records_tmp->data;
+
+                                if(!dap_strcmp(a_hash_out_type,"hex")){
+                                dap_string_append_printf(l_str_out, "tx hash %s \n emit %"DAP_UINT64_FORMAT_U" %s\n",
+                                        tx_hash_str,//l_tx_data->tx_hash_str,
+                                        l_tx_out->header.value,
+                                        l_tx_data->token_ticker);
                                 }
-                                l_list_out_info_tmp = dap_list_next(l_list_out_info_tmp);
+                                else {
+                                    dap_string_append_printf(l_str_out, "tx hash %s \n emit %"DAP_UINT64_FORMAT_U" %s\n",
+                                            l_tx_data->tx_hash_str,
+                                            l_tx_out->header.value,
+                                            l_tx_data->token_ticker);
+                                }
+                                DAP_DELETE(tx_hash_str);
+                                l_records_tmp = dap_list_next(l_records_tmp);
                             }
                         }
-                        l_list_in_items_tmp = dap_list_next(l_list_in_items_tmp);
+                        //dap_list_free(l_records_out);
                     }
-                    // find prev OUT items for IN items
-                    dap_list_t *l_list_in_items2_tmp = l_list_in_items; // go to begin of list
-                    while(l_list_in_items2_tmp) {
-                        const dap_chain_tx_in_t *l_tx_in = (const dap_chain_tx_in_t*) l_list_in_items2_tmp->data;
-                        dap_chain_hash_fast_t tx_prev_hash = l_tx_in->header.tx_prev_hash;
-                        // if first transaction - empty prev OUT item
-                        if(dap_hash_fast_is_blank(&tx_prev_hash)) {
+                    // in other transactions except first one
+                    else {
+                        //find prev OUT item
+                        dap_tx_data_t *l_tx_data_prev = NULL;
+                        HASH_FIND(hh, l_tx_data_hash, &tx_prev_hash, sizeof(dap_chain_hash_fast_t), l_tx_data_prev);
+                        if(l_tx_data_prev != NULL) {
+                            char *l_src_str = NULL;
+                            bool l_src_str_is_cur = false;
 
                             dap_tx_data_t *l_tx_data = NULL;
                             dap_list_t *l_list_out_info_tmp = l_list_out_info;
@@ -926,238 +794,188 @@ char* dap_db_history_addr(dap_chain_addr_t * a_addr, dap_chain_t * a_chain, cons
                                     break;
                                 l_list_out_info_tmp = dap_list_next(l_list_out_info_tmp);
                             }
-
-                            // add emit info to ret string
-                            if(l_tx_data && !memcmp(&l_tx_data->addr, a_addr, sizeof(dap_chain_addr_t))) {
-                                dap_list_t *l_records_tmp = l_records_out;
-                                while(l_records_tmp) {
-                                    char *tx_hash_str;
-                                    if(!dap_strcmp(a_hash_out_type,"hex"))
-                                        tx_hash_str = dap_strdup( l_tx_data->tx_hash_str);
-                                    else
-                                        tx_hash_str = dap_enc_base58_from_hex_str_to_str( l_tx_data->tx_hash_str);
-                                    const dap_chain_tx_out_t *l_tx_out = (const dap_chain_tx_out_t*) l_records_tmp->data;
-
-                                    if(!dap_strcmp(a_hash_out_type,"hex")){
-                                    dap_string_append_printf(l_str_out, "tx hash %s \n emit %"DAP_UINT64_FORMAT_U" %s\n",
-                                            tx_hash_str,//l_tx_data->tx_hash_str,
-                                            l_tx_out->header.value,
-                                            l_tx_data->token_ticker);
-                                    }
-                                    else {
-                                        dap_string_append_printf(l_str_out, "tx hash %s \n emit %"DAP_UINT64_FORMAT_U" %s\n",
-                                                l_tx_data->tx_hash_str,
-                                                l_tx_out->header.value,
-                                                l_tx_data->token_ticker);
-                                    }
-                                    DAP_DELETE(tx_hash_str);
-                                    l_records_tmp = dap_list_next(l_records_tmp);
-                                }
-                            }
-                            //dap_list_free(l_records_out);
-                        }
-                        // in other transactions except first one
-                        else {
-                            //find prev OUT item
-                            dap_tx_data_t *l_tx_data_prev = NULL;
-                            HASH_FIND(hh, l_tx_data_hash, &tx_prev_hash, sizeof(dap_chain_hash_fast_t), l_tx_data_prev);
-                            if(l_tx_data_prev != NULL) {
-                                char *l_src_str = NULL;
-                                bool l_src_str_is_cur = false;
-
-                                dap_tx_data_t *l_tx_data = NULL;
-                                dap_list_t *l_list_out_info_tmp = l_list_out_info;
-                                while(l_list_out_info_tmp) {
-                                    l_tx_data = (dap_tx_data_t*) l_list_out_info_tmp->data;
-                                    if(l_tx_data->token_ticker[0])
-                                        break;
-                                    l_list_out_info_tmp = dap_list_next(l_list_out_info_tmp);
-                                }
-                                if(l_tx_data) {
-                                    // get token from prev tx
-                                    memcpy(l_tx_data->token_ticker, l_tx_data_prev->token_ticker,
-                                            sizeof(l_tx_data->token_ticker));
-
-                                    dap_chain_datum_t *l_datum_prev = get_prev_tx(l_tx_data_prev);
-                                    dap_chain_datum_tx_t *l_tx_prev =
-                                            l_datum_prev ? (dap_chain_datum_tx_t*) l_datum_prev->data : NULL;
-
-                                    // find OUT items in prev datum
-                                    dap_list_t *l_list_out_prev_items = dap_chain_datum_tx_items_get(l_tx_prev,
-                                            TX_ITEM_TYPE_OUT, NULL);
-                                    // find OUT item for IN item;
-                                    dap_list_t *l_list_out_prev_item = dap_list_nth(l_list_out_prev_items,
-                                            l_tx_in->header.tx_out_prev_idx);
-                                    dap_chain_tx_out_t *l_tx_prev_out =
-                                            l_list_out_prev_item ?
-                                                                   (dap_chain_tx_out_t*) l_list_out_prev_item->data :
-                                                                   NULL;
-                                    // if use src addr
-                                    bool l_is_use_src_addr = false;
-                                    // find source addrs
-                                    dap_string_t *l_src_addr = dap_string_new(NULL);
-                                    {
-                                        // find IN items in prev datum - for get destination addr
-                                        dap_list_t *l_list_in_prev_items = dap_chain_datum_tx_items_get(l_tx_prev,
-                                                TX_ITEM_TYPE_IN, NULL);
-                                        dap_list_t *l_list_tmp = l_list_in_prev_items;
-                                        while(l_list_tmp) {
-                                            dap_chain_tx_in_t *l_tx_prev_in = l_list_tmp->data;
-                                            dap_chain_hash_fast_t l_tx_prev_prev_hash =
-                                                    l_tx_prev_in->header.tx_prev_hash;
-                                            //find prev OUT item
-                                            dap_tx_data_t *l_tx_data_prev_prev = NULL;
-                                            HASH_FIND(hh, l_tx_data_hash, &l_tx_prev_prev_hash,
-                                                    sizeof(dap_chain_hash_fast_t), l_tx_data_prev_prev);
-                                            if(l_tx_data_prev_prev) {
-                                                // if use src addr
-                                                if(l_tx_data_prev_prev &&
-                                                        !memcmp(&l_tx_data_prev_prev->addr, a_addr,
-                                                                sizeof(dap_chain_addr_t)))
-                                                    l_is_use_src_addr = true;
-                                                char *l_str = dap_chain_addr_to_str(&l_tx_data_prev_prev->addr);
-                                                if(l_src_addr->len > 0)
-                                                    dap_string_append_printf(l_src_addr, "\n   %s", l_str);
-                                                else
-                                                    dap_string_append_printf(l_src_addr, "%s", l_str); // first record
-                                                DAP_DELETE(l_str);
-                                            }
-                                            l_list_tmp = dap_list_next(l_list_tmp);
+                            if(l_tx_data) {
+                                // get token from prev tx
+                                memcpy(l_tx_data->token_ticker, l_tx_data_prev->token_ticker,
+                                        sizeof(l_tx_data->token_ticker));
+
+                                dap_chain_datum_t *l_datum_prev = get_prev_tx(l_tx_data_prev);
+                                dap_chain_datum_tx_t *l_tx_prev =
+                                        l_datum_prev ? (dap_chain_datum_tx_t*) l_datum_prev->data : NULL;
+
+                                // find OUT items in prev datum
+                                dap_list_t *l_list_out_prev_items = dap_chain_datum_tx_items_get(l_tx_prev,
+                                        TX_ITEM_TYPE_OUT, NULL);
+                                // find OUT item for IN item;
+                                dap_list_t *l_list_out_prev_item = dap_list_nth(l_list_out_prev_items,
+                                        l_tx_in->header.tx_out_prev_idx);
+                                dap_chain_tx_out_t *l_tx_prev_out =
+                                        l_list_out_prev_item ?
+                                                               (dap_chain_tx_out_t*) l_list_out_prev_item->data :
+                                                               NULL;
+                                // if use src addr
+                                bool l_is_use_src_addr = false;
+                                // find source addrs
+                                dap_string_t *l_src_addr = dap_string_new(NULL);
+                                {
+                                    // find IN items in prev datum - for get destination addr
+                                    dap_list_t *l_list_in_prev_items = dap_chain_datum_tx_items_get(l_tx_prev,
+                                            TX_ITEM_TYPE_IN, NULL);
+                                    dap_list_t *l_list_tmp = l_list_in_prev_items;
+                                    while(l_list_tmp) {
+                                        dap_chain_tx_in_t *l_tx_prev_in = l_list_tmp->data;
+                                        dap_chain_hash_fast_t l_tx_prev_prev_hash =
+                                                l_tx_prev_in->header.tx_prev_hash;
+                                        //find prev OUT item
+                                        dap_tx_data_t *l_tx_data_prev_prev = NULL;
+                                        HASH_FIND(hh, l_tx_data_hash, &l_tx_prev_prev_hash,
+                                                sizeof(dap_chain_hash_fast_t), l_tx_data_prev_prev);
+                                        if(l_tx_data_prev_prev) {
+                                            // if use src addr
+                                            if(l_tx_data_prev_prev &&
+                                                    !memcmp(&l_tx_data_prev_prev->addr, a_addr,
+                                                            sizeof(dap_chain_addr_t)))
+                                                l_is_use_src_addr = true;
+                                            char *l_str = dap_chain_addr_to_str(&l_tx_data_prev_prev->addr);
+                                            if(l_src_addr->len > 0)
+                                                dap_string_append_printf(l_src_addr, "\n   %s", l_str);
+                                            else
+                                                dap_string_append_printf(l_src_addr, "%s", l_str); // first record
+                                            DAP_DELETE(l_str);
                                         }
+                                        l_list_tmp = dap_list_next(l_list_tmp);
                                     }
+                                }
 
-                                    l_src_str_is_cur = l_is_use_src_addr;
-                                    if(l_src_addr->len <= 1) {
-                                        l_src_str =
-                                                (l_tx_data) ? dap_chain_addr_to_str(&l_tx_data->addr) :
-                                                NULL;
-                                        if(l_tx_prev_out && !memcmp(&l_tx_prev_out->addr, a_addr, sizeof(dap_chain_addr_t)))
-                                            l_src_str_is_cur = true;
-                                        dap_string_free(l_src_addr, true);
-                                    }
+                                l_src_str_is_cur = l_is_use_src_addr;
+                                if(l_src_addr->len <= 1) {
+                                    l_src_str =
+                                            (l_tx_data) ? dap_chain_addr_to_str(&l_tx_data->addr) :
+                                            NULL;
+                                    if(l_tx_prev_out && !memcmp(&l_tx_prev_out->addr, a_addr, sizeof(dap_chain_addr_t)))
+                                        l_src_str_is_cur = true;
+                                    dap_string_free(l_src_addr, true);
+                                }
+                                else
+                                    l_src_str = dap_string_free(l_src_addr, false);
+
+                                if(l_tx_prev_out) {
+                                    char *l_dst_to_str = dap_chain_addr_to_str(&l_tx_prev_out->addr);
+                                    // if use dst addr
+                                    bool l_is_use_dst_addr = false;
+                                    if(!memcmp(&l_tx_prev_out->addr, a_addr, sizeof(dap_chain_addr_t)))
+                                        l_is_use_dst_addr = true;
+                                    char *tx_hash_str;
+                                    if(!dap_strcmp(a_hash_out_type, "hex"))
+                                        tx_hash_str = dap_strdup(l_tx_data->tx_hash_str);
                                     else
-                                        l_src_str = dap_string_free(l_src_addr, false);
-
-                                    if(l_tx_prev_out) {
-                                        char *l_dst_to_str = dap_chain_addr_to_str(&l_tx_prev_out->addr);
-                                        // if use dst addr
-                                        bool l_is_use_dst_addr = false;
-                                        if(!memcmp(&l_tx_prev_out->addr, a_addr, sizeof(dap_chain_addr_t)))
-                                            l_is_use_dst_addr = true;
-                                        char *tx_hash_str;
-                                        if(!dap_strcmp(a_hash_out_type, "hex"))
-                                            tx_hash_str = dap_strdup(l_tx_data->tx_hash_str);
-                                        else
-                                            tx_hash_str = dap_enc_base58_from_hex_str_to_str(l_tx_data->tx_hash_str);
-                                        if(l_is_use_src_addr && !l_is_use_dst_addr) {
+                                        tx_hash_str = dap_enc_base58_from_hex_str_to_str(l_tx_data->tx_hash_str);
+                                    if(l_is_use_src_addr && !l_is_use_dst_addr) {
+                                        dap_string_append_printf(l_str_out,
+                                                "tx hash %s \n %s in send  %"DAP_UINT64_FORMAT_U" %s from %s\n to %s\n",
+                                                tx_hash_str,//l_tx_data->tx_hash_str,
+                                                l_time_str ? l_time_str : "",
+                                                l_tx_prev_out->header.value,
+                                                l_tx_data->token_ticker,
+                                                l_src_str ? l_src_str : "",
+                                                l_dst_to_str);
+                                    } else if(l_is_use_dst_addr && !l_is_use_src_addr) {
+                                        if(!l_src_str_is_cur)
                                             dap_string_append_printf(l_str_out,
-                                                    "tx hash %s \n %s in send  %"DAP_UINT64_FORMAT_U" %s from %s\n to %s\n",
+                                                    "tx hash %s \n %s in recv %"DAP_UINT64_FORMAT_U" %s from %s\n",
                                                     tx_hash_str,//l_tx_data->tx_hash_str,
                                                     l_time_str ? l_time_str : "",
                                                     l_tx_prev_out->header.value,
                                                     l_tx_data->token_ticker,
-                                                    l_src_str ? l_src_str : "",
-                                                    l_dst_to_str);
-                                        } else if(l_is_use_dst_addr && !l_is_use_src_addr) {
-                                            if(!l_src_str_is_cur)
-                                                dap_string_append_printf(l_str_out,
-                                                        "tx hash %s \n %s in recv %"DAP_UINT64_FORMAT_U" %s from %s\n",
-                                                        tx_hash_str,//l_tx_data->tx_hash_str,
-                                                        l_time_str ? l_time_str : "",
-                                                        l_tx_prev_out->header.value,
-                                                        l_tx_data->token_ticker,
-                                                        l_src_str ? l_src_str : "");
-                                        }
-                                        DAP_DELETE(tx_hash_str);
-                                        DAP_DELETE(l_dst_to_str);
+                                                    l_src_str ? l_src_str : "");
                                     }
-                                    dap_list_free(l_list_out_prev_items);
+                                    DAP_DELETE(tx_hash_str);
+                                    DAP_DELETE(l_dst_to_str);
                                 }
+                                dap_list_free(l_list_out_prev_items);
+                            }
 
-                                // OUT items
-                                dap_list_t *l_records_tmp = l_records_out;
-                                while(l_records_tmp) {
-
-                                    const dap_chain_tx_out_t *l_tx_out = (const dap_chain_tx_out_t*) l_records_tmp->data;
-
-                                    if(( l_tx_data && l_tx_data->is_use_all_cur_out )
-                                            || !memcmp(&l_tx_out->addr, a_addr, sizeof(dap_chain_addr_t))) {
-
-                                        char *l_addr_str = (l_tx_out) ? dap_chain_addr_to_str(&l_tx_out->addr) : NULL;
-
-                                        char *tx_hash_str;
-                                        if(!dap_strcmp(a_hash_out_type, "hex"))
-                                            tx_hash_str = dap_strdup(l_tx_data->tx_hash_str);
-                                        else
-                                            tx_hash_str = dap_enc_base58_from_hex_str_to_str(l_tx_data->tx_hash_str);
-                                        if(l_tx_out && a_addr &&  memcmp(&l_tx_out->addr, a_addr, sizeof(dap_chain_addr_t))==0) {
-                                            if(!l_src_str_is_cur)
-                                                dap_string_append_printf(l_str_out,
-                                                        "tx hash %s \n %s recv %"DAP_UINT64_FORMAT_U" %s from %s\n",
-                                                        tx_hash_str,//l_tx_data->tx_hash_str,
-                                                        l_time_str ? l_time_str : "",
-                                                        l_tx_out->header.value,
-                                                        l_tx_data_prev->token_ticker,
-                                                        l_src_str ? l_src_str : "?");
-                                            // break search prev OUT items for IN items
-                                            l_list_in_items2_tmp = NULL;
-                                        }
-                                        else {
+                            // OUT items
+                            dap_list_t *l_records_tmp = l_records_out;
+                            while(l_records_tmp) {
+
+                                const dap_chain_tx_out_t *l_tx_out = (const dap_chain_tx_out_t*) l_records_tmp->data;
+
+                                if(( l_tx_data && l_tx_data->is_use_all_cur_out )
+                                        || !memcmp(&l_tx_out->addr, a_addr, sizeof(dap_chain_addr_t))) {
+
+                                    char *l_addr_str = (l_tx_out) ? dap_chain_addr_to_str(&l_tx_out->addr) : NULL;
+
+                                    char *tx_hash_str;
+                                    if(!dap_strcmp(a_hash_out_type, "hex"))
+                                        tx_hash_str = dap_strdup(l_tx_data->tx_hash_str);
+                                    else
+                                        tx_hash_str = dap_enc_base58_from_hex_str_to_str(l_tx_data->tx_hash_str);
+                                    if(l_tx_out && a_addr &&  memcmp(&l_tx_out->addr, a_addr, sizeof(dap_chain_addr_t))==0) {
+                                        if(!l_src_str_is_cur)
                                             dap_string_append_printf(l_str_out,
-                                                    "tx hash %s \n %s send %"DAP_UINT64_FORMAT_U" %s to %s\n",
+                                                    "tx hash %s \n %s recv %"DAP_UINT64_FORMAT_U" %s from %s\n",
                                                     tx_hash_str,//l_tx_data->tx_hash_str,
                                                     l_time_str ? l_time_str : "",
                                                     l_tx_out->header.value,
                                                     l_tx_data_prev->token_ticker,
-                                                    l_addr_str ? l_addr_str : "");
-                                            l_list_in_items2_tmp = NULL;
-                                        }
-                                        DAP_DELETE(tx_hash_str);
-                                        DAP_DELETE(l_addr_str);
+                                                    l_src_str ? l_src_str : "?");
+                                        // break search prev OUT items for IN items
+                                        l_list_in_items2_tmp = NULL;
                                     }
-
-                                    l_records_tmp = dap_list_next(l_records_tmp);
+                                    else {
+                                        dap_string_append_printf(l_str_out,
+                                                "tx hash %s \n %s send %"DAP_UINT64_FORMAT_U" %s to %s\n",
+                                                tx_hash_str,//l_tx_data->tx_hash_str,
+                                                l_time_str ? l_time_str : "",
+                                                l_tx_out->header.value,
+                                                l_tx_data_prev->token_ticker,
+                                                l_addr_str ? l_addr_str : "");
+                                        l_list_in_items2_tmp = NULL;
+                                    }
+                                    DAP_DELETE(tx_hash_str);
+                                    DAP_DELETE(l_addr_str);
                                 }
-                                //dap_list_free(l_records_out);
-                                DAP_DELETE(l_src_str);
 
+                                l_records_tmp = dap_list_next(l_records_tmp);
                             }
+                            //dap_list_free(l_records_out);
+                            DAP_DELETE(l_src_str);
+
                         }
-                        l_list_in_items2_tmp = dap_list_next(l_list_in_items2_tmp);
                     }
-        //                l_list_in_items_tmp = dap_list_next(l_list_in_items_tmp);
-        //            }
+                    l_list_in_items2_tmp = dap_list_next(l_list_in_items2_tmp);
                 }
-
-                if(l_list_tx_token)
-                    dap_list_free(l_list_tx_token);
-                if(l_list_out_items)
-                    dap_list_free(l_list_out_items);
-                if(l_list_in_items)
-                    dap_list_free(l_list_in_items);
-                dap_list_free(l_records_out);
-                dap_list_free(l_list_out_info);
-                DAP_DELETE(l_time_str);
-
-                // go to next transaction
-                l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size);
+    //                l_list_in_items_tmp = dap_list_next(l_list_in_items_tmp);
+    //            }
             }
-            DAP_DELETE(l_datums);
-        }
 
-        // delete hashes
-        dap_tx_data_t *l_iter_current, *l_item_tmp;
-        HASH_ITER(hh, l_tx_data_hash , l_iter_current, l_item_tmp)
-        {
-            // delete datum
-            DAP_DELETE(l_iter_current->datum);
-            // delete struct
-            DAP_DELETE(l_iter_current);
-            HASH_DEL(l_tx_data_hash, l_iter_current);
+            if(l_list_tx_token)
+                dap_list_free(l_list_tx_token);
+            if(l_list_out_items)
+                dap_list_free(l_list_out_items);
+            if(l_list_in_items)
+                dap_list_free(l_list_in_items);
+            dap_list_free(l_records_out);
+            dap_list_free(l_list_out_info);
+            DAP_DELETE(l_time_str);
+
+            // go to next transaction
+            l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size);
         }
-        l_cell = l_cell->hh.next;
-    } while (l_cell);
+        DAP_DELETE(l_datums);
+    }
 
+    // delete hashes
+    dap_tx_data_t *l_iter_current, *l_item_tmp;
+    HASH_ITER(hh, l_tx_data_hash , l_iter_current, l_item_tmp)
+    {
+        // delete datum
+        DAP_DELETE(l_iter_current->datum);
+        // delete struct
+        DAP_DELETE(l_iter_current);
+        HASH_DEL(l_tx_data_hash, l_iter_current);
+    }
     // if no history
     if(!l_str_out->len)
         dap_string_append(l_str_out, " empty");
@@ -1179,82 +997,78 @@ static char* dap_db_history_token_list(dap_chain_t * a_chain, const char *a_toke
     dap_string_t *l_str_out = dap_string_new(NULL);
     *a_token_num  = 0;
     size_t l_atom_size = 0;
-    dap_chain_cell_t *l_cell = a_chain->cells;
-    do {
-        dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain, l_cell->id);
-        if(!a_chain->callback_atom_get_datums) {
-            log_it(L_DEBUG, "Not defined callback_atom_get_datums for chain \"%s\"", a_chain->name);
-            return NULL ;
-        }
-        for (dap_chain_atom_ptr_t l_atom = a_chain->callback_atom_iter_get_first(l_atom_iter, &l_atom_size);
-            l_atom && l_atom_size; l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size)) {
-            size_t l_datums_count = 0;
-            dap_chain_datum_t **l_datums = a_chain->callback_atom_get_datums(l_atom, l_atom_size, &l_datums_count);
-            for(size_t l_datum_n = 0; l_datum_n < l_datums_count; l_datum_n++) {
-                dap_chain_datum_t *l_datum = l_datums[l_datum_n];
-                if (!l_datum || l_datum->header.type_id != DAP_CHAIN_DATUM_TOKEN_DECL)
-                    continue;
-                char l_time_str[70];
-                // get time of create datum
-                if (dap_time_to_str_rfc822(l_time_str, 70, l_datum->header.ts_create) < 1)
-                    l_time_str[0] = '\0';
-                dap_chain_datum_token_t *l_token = (dap_chain_datum_token_t*) l_datum->data;
-                if (!a_token_name || !dap_strcmp(l_token->ticker, a_token_name)) {
-                    dap_chain_hash_fast_t l_datum_hash = {};
-                    dap_hash_fast(l_datum, dap_chain_datum_size(l_datum), &l_datum_hash);
-                    char *l_out_hash_str;
-                    if (!strcmp(a_hash_out_type, "hex"))
-                        l_out_hash_str = dap_chain_hash_fast_to_str_new(&l_datum_hash);
-                    else
-                        l_out_hash_str = dap_enc_base58_encode_hash_to_str(&l_datum_hash);
-                    dap_string_append(l_str_out, l_out_hash_str);
-                    dap_string_append(l_str_out, "\n");
-                    dap_string_append_printf(l_str_out, "token %s, created: %s\n", l_token->ticker, l_time_str);
-                    switch (l_token->type) {
-                    // Simple private token decl
-                    case DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE:
-                        dap_string_append_printf(l_str_out, "  total_supply: %.0Lf(%"DAP_UINT64_FORMAT_U"), signs: valid/total %02d/%02d \n",
-                                dap_chain_datoshi_to_coins(l_token->header_private.total_supply),
-                                l_token->header_private.total_supply,
-                                l_token->header_private.signs_valid, l_token->header_private.signs_total);
-                        break;
-                    case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL:
-                        dap_string_append_printf(l_str_out, "  tsd_total_size: %"DAP_UINT64_FORMAT_U", flags: 0x%x \n",
-                                l_token->header_private_decl.tsd_total_size,
-                                l_token->header_private_decl.flags);
-                        break;
-                    case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE:
-                        dap_string_append_printf(l_str_out, "  tsd_total_size: %"DAP_UINT64_FORMAT_U", padding: 0x%x \n",
-                                l_token->header_private_update.tsd_total_size,
-                                l_token->header_private_update.padding);
-                        break;
-                    case DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC: {
-                        char *l_addr = dap_chain_addr_to_str(&l_token->header_public.premine_address);
-                        char * l_balance = dap_chain_balance_to_coins(l_token->header_public.total_supply);
-                        dap_string_append_printf(l_str_out,
-                                " total_supply: %.0Lf(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n",
-                                dap_chain_datoshi_to_coins(l_token->header_public.total_supply),
-                                dap_chain_balance_print(l_token->header_public.total_supply),
-                                l_token->header_public.flags,
-                                dap_chain_balance_print(l_token->header_public.premine_supply),
-                                l_addr ? l_addr : "-");
-                        DAP_DELETE(l_addr);
-                        DAP_DELETE(l_balance);
-                    }
-                        break;
-                    default:
-                        dap_string_append_printf(l_str_out, "unknown token type: 0x%x\n", l_token->type);
-                        break;
-                    }
-                    dap_string_append_printf(l_str_out, "\n");
-                    (*a_token_num)++;
+    dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain);
+    if(!a_chain->callback_atom_get_datums) {
+        log_it(L_DEBUG, "Not defined callback_atom_get_datums for chain \"%s\"", a_chain->name);
+        return NULL ;
+    }
+    for (dap_chain_atom_ptr_t l_atom = a_chain->callback_atom_iter_get_first(l_atom_iter, &l_atom_size);
+        l_atom && l_atom_size; l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size)) {
+        size_t l_datums_count = 0;
+        dap_chain_datum_t **l_datums = a_chain->callback_atom_get_datums(l_atom, l_atom_size, &l_datums_count);
+        for(size_t l_datum_n = 0; l_datum_n < l_datums_count; l_datum_n++) {
+            dap_chain_datum_t *l_datum = l_datums[l_datum_n];
+            if (!l_datum || l_datum->header.type_id != DAP_CHAIN_DATUM_TOKEN_DECL)
+                continue;
+            char l_time_str[70];
+            // get time of create datum
+            if (dap_time_to_str_rfc822(l_time_str, 70, l_datum->header.ts_create) < 1)
+                l_time_str[0] = '\0';
+            dap_chain_datum_token_t *l_token = (dap_chain_datum_token_t*) l_datum->data;
+            if (!a_token_name || !dap_strcmp(l_token->ticker, a_token_name)) {
+                dap_chain_hash_fast_t l_datum_hash = {};
+                dap_hash_fast(l_datum, dap_chain_datum_size(l_datum), &l_datum_hash);
+                char *l_out_hash_str;
+                if (!strcmp(a_hash_out_type, "hex"))
+                    l_out_hash_str = dap_chain_hash_fast_to_str_new(&l_datum_hash);
+                else
+                    l_out_hash_str = dap_enc_base58_encode_hash_to_str(&l_datum_hash);
+                dap_string_append(l_str_out, l_out_hash_str);
+                dap_string_append(l_str_out, "\n");
+                dap_string_append_printf(l_str_out, "token %s, created: %s\n", l_token->ticker, l_time_str);
+                switch (l_token->type) {
+                // Simple private token decl
+                case DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE:
+                    dap_string_append_printf(l_str_out, "  total_supply: %.0Lf(%"DAP_UINT64_FORMAT_U"), signs: valid/total %02d/%02d \n",
+                            l_token->header_private.total_supply / DATOSHI_LD,
+                            l_token->header_private.total_supply,
+                            l_token->header_private.signs_valid, l_token->header_private.signs_total);
+                    break;
+                case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL:
+                    dap_string_append_printf(l_str_out, "  tsd_total_size: %"DAP_UINT64_FORMAT_U", flags: 0x%x \n",
+                            l_token->header_private_decl.tsd_total_size,
+                            l_token->header_private_decl.flags);
+                    break;
+                case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE:
+                    dap_string_append_printf(l_str_out, "  tsd_total_size: %"DAP_UINT64_FORMAT_U", padding: 0x%x \n",
+                            l_token->header_private_update.tsd_total_size,
+                            l_token->header_private_update.padding);
+                    break;
+                case DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC: {
+                    char *l_addr = dap_chain_addr_to_str(&l_token->header_public.premine_address);
+                    char * l_balance = dap_chain_balance_to_coins(l_token->header_public.total_supply);
+                    dap_string_append_printf(l_str_out,
+                            " total_supply: %.0Lf(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n",
+                            l_token->header_public.total_supply / DATOSHI_LD,
+                            dap_chain_balance_print(l_token->header_public.total_supply),
+                            l_token->header_public.flags,
+                            dap_chain_balance_print(l_token->header_public.premine_supply),
+                            l_addr ? l_addr : "-");
+                    DAP_DELETE(l_addr);
+                    DAP_DELETE(l_balance);
                 }
+                    break;
+                default:
+                    dap_string_append_printf(l_str_out, "unknown token type: 0x%x\n", l_token->type);
+                    break;
+                }
+                dap_string_append_printf(l_str_out, "\n");
+                (*a_token_num)++;
             }
-            DAP_DELETE(l_datums);
         }
-        a_chain->callback_atom_iter_delete(l_atom_iter);
-        l_cell = l_cell->hh.next;
-    } while (l_cell);
+        DAP_DELETE(l_datums);
+    }
+    a_chain->callback_atom_iter_delete(l_atom_iter);
     char *l_ret_str = l_str_out ? dap_string_free(l_str_out, false) : NULL;
     return l_ret_str;
 }
@@ -1279,249 +1093,213 @@ static char* dap_db_history_token_list(dap_chain_t * a_chain, const char *a_toke
 static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger, const char *a_filter_token_name, const char *a_filtr_addr_base58, const char *a_hash_out_type, long a_datum_start, long a_datum_end, long *a_total_datums, dap_chain_tx_hash_processed_ht_t *a_tx_hash_processed)
 {
     dap_string_t *l_str_out = dap_string_new(NULL);
+
+    bool l_tx_hash_found = false;
     // list all transactions
     dap_tx_data_t *l_tx_data_hash = NULL;
-    dap_chain_cell_t *l_cell = a_chain->cells;
-    do {
-        // load transactions
-        size_t l_atom_size = 0;
-        dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain, l_cell->id);
-        dap_chain_atom_ptr_t l_atom = a_chain->callback_atom_iter_get_first(l_atom_iter, &l_atom_size);
-        size_t l_datum_num = 0, l_token_num = 0, l_emission_num = 0, l_tx_num = 0;
-        size_t l_datum_num_global = a_total_datums ? *a_total_datums : 0;
-        while(l_atom && l_atom_size) {
-        size_t l_datums_count = 0;
-        dap_chain_datum_t **l_datums =
-                (a_chain->callback_atom_get_datums && l_atom && l_atom_size) ?
-                        a_chain->callback_atom_get_datums(l_atom, l_atom_size, &l_datums_count) : NULL;
-        if(!l_datums) {
-            log_it(L_WARNING, "Not defined callback_atom_get_datums for chain \"%s\"", a_chain->name);
-            return NULL ;
-        }
-        for(size_t l_datum_n = 0; l_datum_n < l_datums_count; l_datum_n++) {
-            dap_chain_datum_t *l_datum = l_datums[l_datum_n];
-            if(!l_datum) { // || l_datum->header.type_id != DAP_CHAIN_DATUM_TX) {
-                // go to next atom
-                //l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size);
-                continue;
-            }
+    // load transactions
+    size_t l_atom_size = 0;
+    dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain);
+    dap_chain_atom_ptr_t l_atom = a_chain->callback_atom_iter_get_first(l_atom_iter, &l_atom_size);
+    size_t l_datum_num = 0, l_token_num = 0, l_emission_num = 0, l_tx_num = 0;
+    size_t l_datum_num_global = a_total_datums ? *a_total_datums : 0;
+    while(l_atom && l_atom_size) {
+    size_t l_datums_count = 0;
+    dap_chain_datum_t **l_datums =
+            (a_chain->callback_atom_get_datums && l_atom && l_atom_size) ?
+                    a_chain->callback_atom_get_datums(l_atom, l_atom_size, &l_datums_count) : NULL;
+    if(!l_datums) {
+        log_it(L_WARNING, "Not defined callback_atom_get_datums for chain \"%s\"", a_chain->name);
+        return NULL ;
+    }
+    for(size_t l_datum_n = 0; l_datum_n < l_datums_count; l_datum_n++) {
 
-        /*dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain);
-        dap_chain_atom_ptr_t l_atom = a_chain->callback_atom_iter_get_first(l_atom_iter);
-        size_t l_atom_size = a_chain->callback_atom_get_size(l_atom);
-        size_t l_datum_num = 0, l_token_num = 0, l_emission_num = 0, l_tx_num = 0;
-        while(l_atom && l_atom_size) {
-            dap_chain_datum_t *l_datum =
-                    a_chain->callback_atom_get_datum ?
-                            a_chain->callback_atom_get_datum(l_atom) : (dap_chain_datum_t*) l_atom;
-            if(!l_datum) {
-                // go to next transaction
-                l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter);
-                l_atom_size = a_chain->callback_atom_get_size(l_atom);
-                log_it(L_ERROR, "datum=NULL for atom=0x%x", l_atom);
-                continue;
-            }*/
-            char l_time_str[70];
-            // get time of create datum
-            if(dap_time_to_str_rfc822(l_time_str, 71, l_datum->header.ts_create) < 1)
-                l_time_str[0] = '\0';
-            switch (l_datum->header.type_id) {
+        dap_chain_datum_t *l_datum = l_datums[l_datum_n];
+        if(!l_datum) { // || l_datum->header.type_id != DAP_CHAIN_DATUM_TX) {
+            // go to next atom
+            //l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size);
+            continue;
+        }
 
-            // token
-            case DAP_CHAIN_DATUM_TOKEN_DECL: {
-                // no token necessary for addr
-                if(a_filtr_addr_base58) {
-                        break;
-                }
+    /*dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain);
+    dap_chain_atom_ptr_t l_atom = a_chain->callback_atom_iter_get_first(l_atom_iter);
+    size_t l_atom_size = a_chain->callback_atom_get_size(l_atom);
+    size_t l_datum_num = 0, l_token_num = 0, l_emission_num = 0, l_tx_num = 0;
+    while(l_atom && l_atom_size) {
+        dap_chain_datum_t *l_datum =
+                a_chain->callback_atom_get_datum ?
+                        a_chain->callback_atom_get_datum(l_atom) : (dap_chain_datum_t*) l_atom;
+        if(!l_datum) {
+            // go to next transaction
+            l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter);
+            l_atom_size = a_chain->callback_atom_get_size(l_atom);
+            log_it(L_ERROR, "datum=NULL for atom=0x%x", l_atom);
+            continue;
+        }*/
+        char l_time_str[70];
+        // get time of create datum
+        if(dap_time_to_str_rfc822(l_time_str, 71, l_datum->header.ts_create) < 1)
+            l_time_str[0] = '\0';
+        switch (l_datum->header.type_id) {
+
+        // token
+        case DAP_CHAIN_DATUM_TOKEN_DECL: {
+
+            // no token necessary for addr
+            if(a_filtr_addr_base58) {
+                    break;
+            }
 
-                dap_chain_datum_token_t *l_token = (dap_chain_datum_token_t*) l_datum->data;
-                //if(a_datum_start < 0 || (l_datum_num >= a_datum_start && l_datum_num < a_datum_end))
-                // datum out of page
-                if(a_datum_start >= 0 && (l_datum_num+l_datum_num_global < (size_t)a_datum_start || l_datum_num+l_datum_num_global >= (size_t)a_datum_end)){
-                    l_token_num++;
+            dap_chain_datum_token_t *l_token = (dap_chain_datum_token_t*) l_datum->data;
+            //if(a_datum_start < 0 || (l_datum_num >= a_datum_start && l_datum_num < a_datum_end))
+            // datum out of page
+            if(a_datum_start >= 0 && (l_datum_num+l_datum_num_global < (size_t)a_datum_start || l_datum_num+l_datum_num_global >= (size_t)a_datum_end)){
+                l_token_num++;
+                break;
+            }
+            if(!a_filter_token_name || !dap_strcmp(l_token->ticker, a_filter_token_name)) {
+                dap_string_append_printf(l_str_out, "token %s, created: %s\n", l_token->ticker, l_time_str);
+                switch (l_token->type) {
+                // Simple private token decl
+                case DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE:
+                    dap_string_append_printf(l_str_out, "  total_supply: %.0Lf(%"DAP_UINT64_FORMAT_U"), signs: valid/total %02d/%02d \n",
+                            l_token->header_private.total_supply / DATOSHI_LD,
+                            l_token->header_private.total_supply,
+                            l_token->header_private.signs_valid, l_token->header_private.signs_total);
+                    break;
+                case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL:
+                    dap_string_append_printf(l_str_out, "  tsd_total_size: %"DAP_UINT64_FORMAT_U", flags: 0x%x \n",
+                            l_token->header_private_decl.tsd_total_size,
+                            l_token->header_private_decl.flags);
+                    break;
+                case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE:
+                    dap_string_append_printf(l_str_out, "  tsd_total_size: %"DAP_UINT64_FORMAT_U", padding: 0x%x \n",
+                            l_token->header_private_update.tsd_total_size,
+                            l_token->header_private_update.padding);
                     break;
+                case DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC: {
+                    char *l_addr = dap_chain_addr_to_str(&l_token->header_public.premine_address);
+                    char * l_balance = dap_chain_balance_to_coins(l_token->header_public.total_supply);
+                    dap_string_append_printf(l_str_out,
+                            " total_supply: %.0Lf(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n",
+                            l_token->header_public.total_supply / DATOSHI_LD,
+                            dap_chain_balance_print(l_token->header_public.total_supply),
+                            l_token->header_public.flags,
+                            dap_chain_balance_print(l_token->header_public.premine_supply),
+                            l_addr ? l_addr : "-");
+                    DAP_DELETE(l_addr);
+                    DAP_DELETE(l_balance);
                 }
-                if(!a_filter_token_name || !dap_strcmp(l_token->ticker, a_filter_token_name)) {
-                    dap_string_append_printf(l_str_out, "token %s, created: %s\n", l_token->ticker, l_time_str);
-                    switch (l_token->type) {
-                    // Simple private token decl
-                    case DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE:
-                        dap_string_append_printf(l_str_out, "  total_supply: %.0Lf(%"DAP_UINT64_FORMAT_U"), signs: valid/total %02d/%02d \n",
-                                dap_chain_datoshi_to_coins(l_token->header_private.total_supply),
-                                l_token->header_private.total_supply,
-                                l_token->header_private.signs_valid, l_token->header_private.signs_total);
-                        break;
-                    case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL:
-                        dap_string_append_printf(l_str_out, "  tsd_total_size: %"DAP_UINT64_FORMAT_U", flags: 0x%x \n",
-                                l_token->header_private_decl.tsd_total_size,
-                                l_token->header_private_decl.flags);
-                        break;
-                    case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE:
-                        dap_string_append_printf(l_str_out, "  tsd_total_size: %"DAP_UINT64_FORMAT_U", padding: 0x%x \n",
-                                l_token->header_private_update.tsd_total_size,
-                                l_token->header_private_update.padding);
-                        break;
-                    case DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC: {
-                        char *l_addr = dap_chain_addr_to_str(&l_token->header_public.premine_address);
-                        char * l_balance = dap_chain_balance_to_coins(l_token->header_public.total_supply);
-                        dap_string_append_printf(l_str_out,
-                                " total_supply: %.0Lf(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n",
-                                dap_chain_datoshi_to_coins(l_token->header_public.total_supply),
-                                dap_chain_balance_print(l_token->header_public.total_supply),
-                                l_token->header_public.flags,
-                                dap_chain_balance_print(l_token->header_public.premine_supply),
-                                l_addr ? l_addr : "-");
-                        DAP_DELETE(l_addr);
-                        DAP_DELETE(l_balance);
-                    }
-                        break;
-                    default:
-                        dap_string_append_printf(l_str_out, "unknown token type: 0x%x\n", l_token->type);
-                        break;
+                    break;
+                default:
+                    dap_string_append_printf(l_str_out, "unknown token type: 0x%x\n", l_token->type);
+                    break;
 
-                    }
-                    dap_string_append_printf(l_str_out, "\n");
-                    l_token_num++;
                 }
+                dap_string_append_printf(l_str_out, "\n");
+                l_token_num++;
             }
-                break;
+        }
+            break;
 
             // emission
-            case DAP_CHAIN_DATUM_256_TOKEN_EMISSION:
-            case DAP_CHAIN_DATUM_TOKEN_EMISSION: {
-                // datum out of page
-                if(a_datum_start >= 0 && (l_datum_num+l_datum_num_global < (size_t)a_datum_start || l_datum_num+l_datum_num_global >= (size_t)a_datum_end)) {
-                     l_token_num++;
+        case DAP_CHAIN_DATUM_TOKEN_EMISSION: {
+            // datum out of page
+            if(a_datum_start >= 0 && (l_datum_num+l_datum_num_global < (size_t)a_datum_start || l_datum_num+l_datum_num_global >= (size_t)a_datum_end)) {
+                 l_token_num++;
+                 break;
+            }
+            size_t l_emission_size = dap_chain_datum_emission_get_size(l_datum->data);
+            dap_chain_datum_token_emission_t *l_token_em = dap_chain_datum_emission_read(l_datum->data, &l_emission_size);
+            if(!a_filter_token_name || !dap_strcmp(l_token_em->hdr.ticker, a_filter_token_name)) {
+                char * l_token_emission_address_str = dap_chain_addr_to_str(&(l_token_em->hdr.address));
+                // filter for addr
+                if(dap_strcmp(a_filtr_addr_base58,l_token_emission_address_str)) {
                      break;
                 }
-                size_t l_emission_size = dap_chain_datum_emission_get_size(l_datum->data);
-                dap_chain_datum_token_emission_t *l_token_em = dap_chain_datum_emission_read(l_datum->data, &l_emission_size);
-                if(!a_filter_token_name || !dap_strcmp(l_token_em->hdr.ticker, a_filter_token_name)) {
-                    char * l_token_emission_address_str = dap_chain_addr_to_str(&(l_token_em->hdr.address));
-                    // filter for addr
-                    if(dap_strcmp(a_filtr_addr_base58,l_token_emission_address_str)) {
-                         break;
-                    }
 
-                    if ( l_token_em->hdr.type_value_256 ) { // 256
-                    dap_string_append_printf(l_str_out, "emission 256: %.0Lf(%s) %s, type: %s, version: %d\n",
-                            dap_chain_balance_to_coins(dap_chain_uint128_from_uint256(l_token_em->hdr.value_256)),
-                            dap_chain_u256tostr(l_token_em->hdr.value_256),
-                            l_token_em->hdr.ticker,
-                            c_dap_chain_datum_token_emission_type_str[l_token_em->hdr.type],
-                            l_token_em->hdr.version);
-                    } else
-                        dap_string_append_printf(l_str_out, "emission: %.0Lf(%"DAP_UINT64_FORMAT_U") %s, type: %s, version: %d\n",
-                            dap_chain_datoshi_to_coins(l_token_em->hdr.value),
-                            l_token_em->hdr.value,
-                            l_token_em->hdr.ticker,
-                            c_dap_chain_datum_token_emission_type_str[l_token_em->hdr.type],
-                            l_token_em->hdr.version);
-
-                    dap_string_append_printf(l_str_out, "  to addr: %s\n", l_token_emission_address_str);
-
-                    DAP_DELETE(l_token_emission_address_str);
-                    switch (l_token_em->hdr.type) {
-                    case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_UNDEFINED:
-                        break;
-                    case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_AUTH:
-                        dap_string_append_printf(l_str_out, "  signs_count: %d\n", l_token_em->data.type_auth.signs_count);
-                        break;
-                    case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_ALGO:
-                        dap_string_append_printf(l_str_out, "  codename: %s\n", l_token_em->data.type_algo.codename);
-                        break;
-                    case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_ATOM_OWNER:
-                        if ( l_token_em->hdr.type_value_256 ) { // 256
-                            dap_string_append_printf(l_str_out, " value_start: %s(%s), codename: %s\n",
-                                dap_chain_datoshi_to_coins(dap_chain_uint128_from_uint256(l_token_em->data.type_atom_owner.value_start_256)),
-                                dap_chain_u256tostr(l_token_em->data.type_atom_owner.value_start_256),
-                                l_token_em->data.type_atom_owner.value_change_algo_codename
-                            );
-                        } else {
-                            dap_string_append_printf(l_str_out, " value_start: %.0Lf(%"DAP_UINT64_FORMAT_U"), codename: %s\n",
-                                dap_chain_datoshi_to_coins(l_token_em->data.type_atom_owner.value_start),
-                                l_token_em->data.type_atom_owner.value_start,
-                                l_token_em->data.type_atom_owner.value_change_algo_codename
-                            );
-                        }
-                    break;
-                    case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_SMART_CONTRACT: {
-                        char *l_addr = dap_chain_addr_to_str(&l_token_em->data.type_presale.addr);
-                        // get time of create datum
-                        if(dap_time_to_str_rfc822(l_time_str, 71, l_token_em->data.type_presale.lock_time) < 1)
-                                l_time_str[0] = '\0';
-                        dap_string_append_printf(l_str_out, "  flags: 0x%x, lock_time: %s\n", l_token_em->data.type_presale.flags, l_time_str);
-                        dap_string_append_printf(l_str_out, "  addr: %s\n", l_addr);
-                        DAP_DELETE(l_addr);
-                    }
-                        break;
-                    }
-                    dap_string_append_printf(l_str_out, "\n");
-                    l_emission_num++;
-                }
-                DAP_DELETE(l_token_em);
-            } break;
+                dap_string_append_printf(l_str_out, "emission: %.0Lf(%"DAP_UINT64_FORMAT_U") %s, type: %s, version: %d\n",
+                        l_token_em->hdr.value / DATOSHI_LD, l_token_em->hdr.value, l_token_em->hdr.ticker,
+                        c_dap_chain_datum_token_emission_type_str[l_token_em->hdr.type],
+                        l_token_em->hdr.version);
+                dap_string_append_printf(l_str_out, "  to addr: %s\n", l_token_emission_address_str);
 
-            // transaction
-            case DAP_CHAIN_DATUM_TX:{
-
-                // datum out of page
-                if(a_datum_start >= 0 && (l_datum_num+l_datum_num_global < (size_t)a_datum_start || l_datum_num+l_datum_num_global >= (size_t)a_datum_end)) {
-                    l_tx_num++;
+                DAP_DELETE(l_token_emission_address_str);
+                switch (l_token_em->hdr.type) {
+                case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_UNDEFINED:
+                    break;
+                case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_AUTH:
+                    dap_string_append_printf(l_str_out, "  signs_count: %d\n", l_token_em->data.type_auth.signs_count);
                     break;
+                case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_ALGO:
+                    dap_string_append_printf(l_str_out, "  codename: %s\n", l_token_em->data.type_algo.codename);
+                    break;
+                case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_ATOM_OWNER:
+                    dap_string_append_printf(l_str_out, " value_start: %.0Lf(%"DAP_UINT64_FORMAT_U"), codename: %s\n",
+                            l_token_em->data.type_atom_owner.value_start / DATOSHI_LD,
+                            l_token_em->data.type_atom_owner.value_start,
+                            l_token_em->data.type_atom_owner.value_change_algo_codename);
+                    break;
+                case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_SMART_CONTRACT: {
+                    char *l_addr = dap_chain_addr_to_str(&l_token_em->data.type_presale.addr);
+                    // get time of create datum
+                    if(dap_time_to_str_rfc822(l_time_str, 71, l_token_em->data.type_presale.lock_time) < 1)
+                            l_time_str[0] = '\0';
+                    dap_string_append_printf(l_str_out, "  flags: 0x%x, lock_time: %s\n", l_token_em->data.type_presale.flags, l_time_str);
+                    dap_string_append_printf(l_str_out, "  addr: %s\n", l_addr);
+                    DAP_DELETE(l_addr);
                 }
-
-                dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*)l_datum->data;
-                //calc tx hash
-                s_dap_chain_datum_tx_out_data(l_tx, a_ledger, l_str_out, a_hash_out_type, true, &a_tx_hash_processed, &l_tx_num);
-            }
-                break;
-
-                // transaction
-            case DAP_CHAIN_DATUM_256_TX:{
-
-                // datum out of page
-                if(a_datum_start >= 0 && (l_datum_num+l_datum_num_global < (size_t)a_datum_start || l_datum_num+l_datum_num_global >= (size_t)a_datum_end)) {
-                    l_tx_num++;
                     break;
                 }
-                dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*)l_datum->data;
-                s_dap_chain_datum_tx_out_data(l_tx, a_ledger, l_str_out, a_hash_out_type, true, &a_tx_hash_processed, &l_tx_num);
+                dap_string_append_printf(l_str_out, "\n");
+                l_emission_num++;
             }
-                break;
+            DAP_DELETE(l_token_em);
+        } break;
 
-            default:
-                dap_string_append_printf(l_str_out, "unknown datum type=%d\n", l_datum->header.type_id);
+        // transaction
+        case DAP_CHAIN_DATUM_TX:{
+
+            // datum out of page
+            if(a_datum_start >= 0 && (l_datum_num+l_datum_num_global < (size_t)a_datum_start || l_datum_num+l_datum_num_global >= (size_t)a_datum_end)) {
+                l_tx_num++;
                 break;
             }
-            l_datum_num++;
+            dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*)l_datum->data;
+            //calc tx hash
+            s_dap_chain_datum_tx_out_data(l_tx, a_ledger, l_str_out, a_hash_out_type, true, &a_tx_hash_processed, &l_tx_num);
         }
-            // go to next transaction
-            l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size);
-            //l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter);
-            //l_atom_size = a_chain->callback_atom_get_size(l_atom);
-        }
-        a_chain->callback_atom_iter_delete(l_atom_iter);
-        //total
-        dap_string_append_printf(l_str_out,
-                "---------------\ntokens: %zu\nemissions: %zu\ntransactions: %zu\ntotal datums: %zu", l_token_num,
-                l_emission_num, l_tx_num, l_datum_num);
-
-        // return total datums
-        if(a_total_datums)
-            *a_total_datums = l_datum_num;
-        // delete hashes
-        dap_tx_data_t *l_iter_current, *l_item_tmp;
-        HASH_ITER(hh, l_tx_data_hash , l_iter_current, l_item_tmp)
-        {
-            HASH_DEL(l_tx_data_hash, l_iter_current);
-            // delete datum
-            DAP_DELETE(l_iter_current->datum);
-            // delete struct
-            DAP_DELETE(l_iter_current);
+            break;
+        default:
+            dap_string_append_printf(l_str_out, "unknown datum type=%d\n", l_datum->header.type_id);
+            break;
         }
-        l_cell = l_cell->hh.next;
-    } while (l_cell);
+        l_datum_num++;
+    }
+        // go to next transaction
+        l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size);
+        //l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter);
+        //l_atom_size = a_chain->callback_atom_get_size(l_atom);
+    }
+    a_chain->callback_atom_iter_delete(l_atom_iter);
+    //total
+    dap_string_append_printf(l_str_out,
+            "---------------\ntokens: %zu\nemissions: %zu\ntransactions: %zu\ntotal datums: %zu", l_token_num,
+            l_emission_num, l_tx_num, l_datum_num);
+
+    // return total datums
+    if(a_total_datums)
+        *a_total_datums = l_datum_num;
+    // delete hashes
+    dap_tx_data_t *l_iter_current, *l_item_tmp;
+    HASH_ITER(hh, l_tx_data_hash , l_iter_current, l_item_tmp)
+    {
+        HASH_DEL(l_tx_data_hash, l_iter_current);
+        // delete datum
+        DAP_DELETE(l_iter_current->datum);
+        // delete struct
+        DAP_DELETE(l_iter_current);
+    }
 
     // if no history
     if(!l_str_out->len)
@@ -1561,6 +1339,7 @@ int com_ledger(int a_argc, char ** a_argv, char **a_str_reply)
         dap_chain_node_cli_set_reply_text(a_str_reply, "invalid parameter -H, valid values: -H <hex | base58>");
         return -1;
     }
+
     int l_cmd = CMD_NONE;
     if (dap_chain_node_cli_find_option_val(a_argv, 1, 2, "list", NULL)){
         l_cmd = CMD_LIST;
@@ -1569,7 +1348,6 @@ int com_ledger(int a_argc, char ** a_argv, char **a_str_reply)
         if (dap_chain_node_cli_find_option_val(a_argv, 2, 3, "info", NULL))
             l_cmd = CMD_TX_INFO;
     }
-
     // command tx_history
     if(l_cmd == CMD_TX_HISTORY) {
         bool l_is_all = dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-all", NULL);
@@ -1596,7 +1374,6 @@ int com_ledger(int a_argc, char ** a_argv, char **a_str_reply)
                 return -3;
             }
         }
-
         //Select chain emission
         if(!l_chain_str) { // chain may be null -> then all chain use
             //dap_chain_node_cli_set_reply_text(a_str_reply, "command requires parameter '-chain'");
@@ -1623,7 +1400,6 @@ int com_ledger(int a_argc, char ** a_argv, char **a_str_reply)
 //        dap_chain_hash_fast_to_str(&l_tx_hash, hash_str,99);
 //        int gsdgsd=523;
         }
-
         dap_chain_addr_t *l_addr = NULL;
         // if need addr
         if(l_wallet_name || l_addr_base58) {
@@ -1657,9 +1433,7 @@ int com_ledger(int a_argc, char ** a_argv, char **a_str_reply)
         // all chain
         else
             l_chain_cur = dap_chain_enum(&l_chain_tmp);
-
         while(l_chain_cur) {
-
             // only selected net
             if(l_net->pub.id.uint64 == l_chain_cur->net_id.uint64) {
                 // separator between chains
@@ -1669,14 +1443,12 @@ int com_ledger(int a_argc, char ** a_argv, char **a_str_reply)
                 char *l_str_out = NULL;
                 dap_string_append_printf(l_str_ret, "chain: %s\n", l_chain_cur->name);
                 dap_ledger_t *l_ledger = dap_chain_ledger_by_net_name(l_net_str);
-
                 if(l_is_all) {
                     // without filters
                     l_str_out = dap_db_history_filter(l_chain_cur, l_ledger, NULL, NULL, l_hash_out_type, -1, 0, NULL, l_list_tx_hash_processd);
                     dap_string_append_printf(l_str_ret, "all history:\n%s\n", l_str_out ? l_str_out : " empty");
                 }
                 else {
-
                     l_str_out = l_tx_hash_str ?
                                                 dap_db_history_tx(&l_tx_hash, l_chain_cur, l_hash_out_type) :
                                                 dap_db_history_addr(l_addr, l_chain_cur, l_hash_out_type);
@@ -1701,8 +1473,6 @@ int com_ledger(int a_argc, char ** a_argv, char **a_str_reply)
             dap_chain_enum_unlock();
             l_chain_cur = dap_chain_enum(&l_chain_tmp);
         }
-
-
         DAP_DELETE(l_addr);
         _dap_chain_tx_hash_processed_ht_free(l_list_tx_hash_processd);
         // all chain
@@ -1713,7 +1483,6 @@ int com_ledger(int a_argc, char ** a_argv, char **a_str_reply)
         return 0;
     }
     else if(l_cmd == CMD_LIST){
-
         enum {SUBCMD_NONE, SUBCMD_LIST_COIN};
         int l_sub_cmd = SUBCMD_NONE;
         if (dap_chain_node_cli_find_option_val(a_argv, 2, 3, "coins", NULL ))
@@ -1739,7 +1508,6 @@ int com_ledger(int a_argc, char ** a_argv, char **a_str_reply)
         dap_string_free(l_str_ret, true);
         return 0;
     } else if (l_cmd == CMD_TX_INFO){
-
         //GET hash
         dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-hash", &l_tx_hash_str);
         //get net
diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c
index 2f599cd3b0e1b031953bce38261316f8e0f1b2da..111f7fd5ab4b7d39508055e081e71e2315b5f446 100644
--- a/modules/net/dap_chain_node_client.c
+++ b/modules/net/dap_chain_node_client.c
@@ -233,7 +233,7 @@ static bool s_timer_update_states_callback(void *a_arg)
                         dap_stream_ch_chain_sync_request_t l_sync_gdb = {};
                         l_sync_gdb.node_addr.uint64 = dap_chain_net_get_cur_addr_int(l_net);
                         dap_stream_ch_chain_pkt_write_unsafe(l_node_client->ch_chain, DAP_STREAM_CH_CHAIN_PKT_TYPE_UPDATE_GLOBAL_DB_REQ,
-                                                             l_net->pub.id.uint64, 0, 0,
+                                                             l_net->pub.id.uint64, 0, l_net->pub.cell_id.uint64,
                                                              &l_sync_gdb, sizeof(l_sync_gdb));
                     }
                     return true;
@@ -667,7 +667,7 @@ static bool dap_chain_node_client_connect_internal(dap_chain_node_client_t *a_no
     a_node_client->client->_inheritor = a_node_client;
     dap_client_set_active_channels_unsafe(a_node_client->client, a_active_channels);
 
-    dap_client_set_auth_cert(a_node_client->client, a_node_client->net->pub.name); // TODO provide the certificate choice
+    //dap_client_set_auth_cert(a_node_client->client, dap_cert_find_by_name("auth")); // TODO provide the certificate choice
 
     int hostlen = 128;
     char host[hostlen];
diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h
index a59c548ca9056f91b1239aa60cd4f2f1094ba31f..7579cbdb979ee6e7608285806811289447d3944c 100644
--- a/modules/net/include/dap_chain_net.h
+++ b/modules/net/include/dap_chain_net.h
@@ -67,6 +67,7 @@ static const char * g_net_state_str[]={
 typedef struct dap_chain_net{
     struct {
         dap_chain_net_id_t id;
+        dap_chain_cell_id_t cell_id; // Cell where the node is connected to. {{0}} if not celled(sharded) blockchain
         char * name;
         char * gdb_groups_prefix;
         char * gdb_nodes_aliases;
diff --git a/modules/net/include/dap_chain_node.h b/modules/net/include/dap_chain_node.h
index 703175de5068982408b12d69a41216642fd1894e..6b6a810667a10eec933d95262cdc46dcc79d23a4 100644
--- a/modules/net/include/dap_chain_node.h
+++ b/modules/net/include/dap_chain_node.h
@@ -122,14 +122,14 @@ size_t dap_chain_node_info_get_size(dap_chain_node_info_t *node_info);
 //dap_chain_node_info_t* dap_chain_node_info_deserialize(uint8_t *node_info_str, size_t size);
 
 /**
- * Generate node addr by net id
+ * Generate node addr by shard id
  */
-dap_chain_node_addr_t* dap_chain_node_gen_addr(dap_chain_net_id_t a_net_id);
+dap_chain_node_addr_t* dap_chain_node_gen_addr(dap_chain_net_t * l_net,dap_chain_cell_id_t *a_cell_id);
 
 /**
  * Check the validity of the node address by shard id
  */
-bool dap_chain_node_check_addr(dap_chain_net_t * l_net, dap_chain_node_addr_t *a_addr);
+bool dap_chain_node_check_addr(dap_chain_net_t * l_net,dap_chain_node_addr_t *addr, dap_chain_cell_id_t *a_cell_id);
 
 dap_chain_node_addr_t * dap_chain_node_alias_find(dap_chain_net_t * l_net,const char *alias);
 bool dap_chain_node_alias_register(dap_chain_net_t *a_net, const char *a_alias, dap_chain_node_addr_t *a_addr);
diff --git a/modules/net/srv/CMakeLists.txt b/modules/net/srv/CMakeLists.txt
index 399b0a433767971f7af42388381ad7e80c303885..b6661c7f1b94abb872d0e6f63babbdaa7a086a32 100644
--- a/modules/net/srv/CMakeLists.txt
+++ b/modules/net/srv/CMakeLists.txt
@@ -18,6 +18,6 @@ endif()
 #endif()
 
 target_link_libraries(${NET_SRV_LIBS})
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_include_directories(dap_chain_net_srv INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
 target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../3rdparty/uthash/src)
diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c
index 56cdef9d0ebdbfaf3be0e9342f8573e6e9dfae25..21dcd4d34b4f260c8dcd8789f126596593b4ea79 100644
--- a/modules/net/srv/dap_chain_net_srv_order.c
+++ b/modules/net/srv/dap_chain_net_srv_order.c
@@ -546,9 +546,8 @@ static void s_srv_order_callback_notify(void *a_arg, const char a_op_code, const
             }
             dap_chain_addr_t l_addr = {};
             dap_chain_addr_fill(&l_addr, l_sign->header.type, &l_pkey_hash, l_net->pub.id);
-            // uint128_t l_balance = dap_chain_ledger_calc_balance(l_net->pub.ledger, &l_addr, l_order->price_ticker);
-            uint256_t l_balance = dap_chain_ledger_calc_balance(l_net->pub.ledger, &l_addr, l_order->price_ticker);
-            uint64_t l_solvency = dap_chain_uint256_to(l_balance);
+            uint128_t l_balance = dap_chain_ledger_calc_balance(l_net->pub.ledger, &l_addr, l_order->price_ticker);
+            uint64_t l_solvency = dap_chain_uint128_to(l_balance);
             if (l_solvency < l_order->price && !dap_chain_net_srv_stake_key_delegated(&l_addr)) {
                 dap_chain_global_db_gr_del(dap_strdup(a_key), a_group);
             }*/
diff --git a/modules/service/app-db/CMakeLists.txt b/modules/service/app-db/CMakeLists.txt
index 66ca6ade4273ae9e2e34d8d15795c869529401dc..f6a7a7977d843e1bdf10796aa8c237534a916ec5 100644
--- a/modules/service/app-db/CMakeLists.txt
+++ b/modules/service/app-db/CMakeLists.txt
@@ -7,7 +7,7 @@ file(GLOB DAP_CHAIN_NET_SRV_APP_DB_HEADERS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_NET_SRV_APP_DB_SRCS} ${DAP_CHAIN_NET_SRV_APP_DB_HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_chain_net_srv dap_chain_net_srv_app)
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_link_libraries(dap_chain_net_srv_app_db dap_chain_net_srv dap_chain_net_srv_app)
+target_include_directories(dap_chain_net_srv_app_db INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
 
diff --git a/modules/service/app/CMakeLists.txt b/modules/service/app/CMakeLists.txt
index 210374c2f42c6e5a616714fabdd788da5235e848..e69756a8d304d41eb5e220462288a86aead5c742 100644
--- a/modules/service/app/CMakeLists.txt
+++ b/modules/service/app/CMakeLists.txt
@@ -7,6 +7,6 @@ file(GLOB DAP_CHAIN_NET_SRV_APP_HEADERS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_NET_SRV_APP_SRCS} ${DAP_CHAIN_NET_SRV_APP_HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_net dap_chain_net_srv)
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_link_libraries(dap_chain_net_srv_app dap_core dap_crypto dap_chain dap_chain_net dap_chain_net_srv)
+target_include_directories(dap_chain_net_srv_app INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
diff --git a/modules/service/datum/CMakeLists.txt b/modules/service/datum/CMakeLists.txt
index 62ad4a0ba48cf1603be5e5a9d22959f881683498..dc38274497865096fdd8e21bb576dc99cf373ef0 100644
--- a/modules/service/datum/CMakeLists.txt
+++ b/modules/service/datum/CMakeLists.txt
@@ -7,7 +7,7 @@ file(GLOB DAP_CHAIN_NET_SRV_DATUM_HEADERS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_NET_SRV_DATUM_SRCS} ${DAP_CHAIN_NET_SRV_DATUM_HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_chain_net_srv)
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_link_libraries(dap_chain_net_srv_datum dap_chain_net_srv)
+target_include_directories(dap_chain_net_srv_datum INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
 
diff --git a/modules/service/mining-pool/CMakeLists.txt b/modules/service/mining-pool/CMakeLists.txt
index 7db0c520a52b763772d313a21ec2d1a0ff55540e..6a66f485f3affa09480ab6930c8b3f153c44afd5 100644
--- a/modules/service/mining-pool/CMakeLists.txt
+++ b/modules/service/mining-pool/CMakeLists.txt
@@ -6,7 +6,7 @@ file(GLOB DAP_CHAIN_NET_SRV_DATUM_POOL_HEADERS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_NET_SRV_DATUM_POOL_SRCS} ${DAP_CHAIN_NET_SRV_DATUM_POOL_HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_chain_net_srv dap_chain_net_srv_datum)
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_link_libraries(dap_chain_net_srv_datum_pool dap_chain_net_srv dap_chain_net_srv_datum)
+target_include_directories(dap_chain_net_srv_datum_pool INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
 
diff --git a/modules/service/stake/CMakeLists.txt b/modules/service/stake/CMakeLists.txt
index 99474583910ad884edbd0326202522816a11ced1..e6217cf00995e909380b99444018ef70a5235501 100644
--- a/modules/service/stake/CMakeLists.txt
+++ b/modules/service/stake/CMakeLists.txt
@@ -7,6 +7,6 @@ file(GLOB DAP_SRV_STAKE_HEADERS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_SRV_STAKE_SRCS} ${DAP_SRV_STAKE_HEADERS})
 
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_include_directories(dap_chain_crypto INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
 target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_crypto dap_chain_net dap_chain_net_srv dap_chain_cs_dag_poa dap_chain_cs_block_poa)
diff --git a/modules/service/stake/dap_chain_net_srv_stake.c b/modules/service/stake/dap_chain_net_srv_stake.c
index 62f1e2522a39545a5ea08ddf00ad37c73f195e56..ea3594eff8f126b8fa926597f550813b5053d332 100644
--- a/modules/service/stake/dap_chain_net_srv_stake.c
+++ b/modules/service/stake/dap_chain_net_srv_stake.c
@@ -719,7 +719,7 @@ 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, "Format -fee_percent <long double>(%)");
                 return -12;
             }
-            uint64_t l_balance = dap_chain_uint256_to(dap_chain_wallet_get_balance(l_wallet, l_net->pub.id, l_token_str));
+            uint64_t l_balance = dap_chain_uint128_to(dap_chain_wallet_get_balance(l_wallet, l_net->pub.id, l_token_str));
             if (l_balance < l_value) {
                 dap_chain_node_cli_set_reply_text(a_str_reply, "Insufficient coins for token %s in wallet '%s'", l_token_str, l_wallet_str);
                 return -13;
@@ -892,7 +892,7 @@ 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, "Specified wallet not found");
                     return -18;
                 }
-                uint64_t l_balance = dap_chain_uint256_to(dap_chain_wallet_get_balance(l_wallet, l_net->pub.id, l_stake->token));
+                uint64_t l_balance = dap_chain_uint128_to(dap_chain_wallet_get_balance(l_wallet, l_net->pub.id, l_stake->token));
                 if (l_balance < l_stake->value) {
                     dap_chain_node_cli_set_reply_text(a_str_reply, "Insufficient coins for token %s in wallet '%s'", l_token_str, l_wallet_str);
                     return -11;
diff --git a/modules/service/xchange/CMakeLists.txt b/modules/service/xchange/CMakeLists.txt
index c6b509051eb664c3ea4dba7b4939eda69681aca8..82d036e96bc5d37317cd91cb7ad5d5df4bc53515 100644
--- a/modules/service/xchange/CMakeLists.txt
+++ b/modules/service/xchange/CMakeLists.txt
@@ -7,6 +7,6 @@ file(GLOB DAP_SRV_XCHANGE_HEADERS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_SRV_XCHANGE_SRCS} ${DAP_SRV_XCHANGE_HEADERS})
 
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_include_directories(dap_chain_crypto INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
 target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_crypto dap_chain_net dap_chain_net_srv)
diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c
index e38168e51a839f904d87819a86c4899d8bc28dff..df904b6701f4432326172ca942dc695649498fbf 100644
--- a/modules/service/xchange/dap_chain_net_srv_xchange.c
+++ b/modules/service/xchange/dap_chain_net_srv_xchange.c
@@ -571,8 +571,8 @@ static int s_cli_srv_xchange_price(int a_argc, char **a_argv, int a_arg_index, c
                 dap_chain_node_cli_set_reply_text(a_str_reply, "Specified wallet not found");
                 return -11;
             }
-            uint256_t l_balance = dap_chain_wallet_get_balance(l_wallet, l_net_sell->pub.id, l_token_sell_str);
-            uint64_t l_value = dap_chain_uint256_to(l_balance);
+            uint128_t l_balance = dap_chain_wallet_get_balance(l_wallet, l_net_sell->pub.id, l_token_sell_str);
+            uint64_t l_value = dap_chain_uint128_to(l_balance);
             if (l_value < l_datoshi_sell) {
                 dap_chain_node_cli_set_reply_text(a_str_reply, "Not enough cash in specified wallet");
                 dap_chain_wallet_close(l_wallet);
@@ -695,8 +695,8 @@ static int s_cli_srv_xchange_price(int a_argc, char **a_argv, int a_arg_index, c
                     dap_chain_node_cli_set_reply_text(a_str_reply, "At least one of updating parameters is mandatory");
                     return -13;
                 }
-                uint256_t l_balance = dap_chain_wallet_get_balance(l_wallet, l_net_sell->pub.id, l_token_sell_str);
-                uint64_t l_value = dap_chain_uint256_to(l_balance);
+                uint128_t l_balance = dap_chain_wallet_get_balance(l_wallet, l_net_sell->pub.id, l_token_sell_str);
+                uint64_t l_value = dap_chain_uint128_to(l_balance);
                 if (l_datoshi_sell && l_value < l_datoshi_sell) {
                         dap_chain_node_cli_set_reply_text(a_str_reply, "Not enough cash in specified wallet");
                         dap_chain_wallet_close(l_wallet);
diff --git a/modules/test/CMakeLists.txt b/modules/test/CMakeLists.txt
index b48617d0f087fa6a5e14e6113595548353fe63cb..70e543e45b934bcc5d43a765db96d620a4af9280 100644
--- a/modules/test/CMakeLists.txt
+++ b/modules/test/CMakeLists.txt
@@ -6,4 +6,4 @@ project(dap_test)
 
 add_library(${PROJECT_NAME} STATIC dap_test.h dap_test.c dap_test_generator.h dap_test_generator.c)
 
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_include_directories(dap_test INTERFACE .)
diff --git a/modules/type/blocks/CMakeLists.txt b/modules/type/blocks/CMakeLists.txt
index 0c377cec8c870d5b1959ac79eadfad106d78e0a6..44f0787add4f670f935894cffad47fbe58c4a33b 100644
--- a/modules/type/blocks/CMakeLists.txt
+++ b/modules/type/blocks/CMakeLists.txt
@@ -7,6 +7,6 @@ file(GLOB DAP_CHAIN_BLOCK_HEADERS include/*.h)
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_BLOCK_SRCS} ${DAP_CHAIN_BLOCK_HEADERS})
 
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain )
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_link_libraries(dap_chain_cs_blocks dap_core dap_crypto dap_chain )
+target_include_directories(dap_chain_cs_blocks INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index c119e6afa77981893bb13036830f76634bb8a3b6..7d2b74322d88836c07dda4166053f20fb7b8a80b 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -105,7 +105,7 @@ static dap_chain_atom_verify_res_t s_callback_atom_verify(dap_chain_t * a_chain,
 //    Get block header size
 static size_t s_callback_atom_get_static_hdr_size(void);
 
-static dap_chain_atom_iter_t* s_callback_atom_iter_create(dap_chain_t * a_chain , dap_chain_cell_id_t a_cell_id);
+static dap_chain_atom_iter_t* s_callback_atom_iter_create(dap_chain_t * a_chain );
 static dap_chain_atom_iter_t* s_callback_atom_iter_create_from(dap_chain_t *  ,
                                                                      dap_chain_atom_ptr_t , size_t);
 
@@ -456,13 +456,7 @@ static int s_cli_blocks(int a_argc, char ** a_argv, char **a_str_reply)
             size_t l_block_size = 0;
             dap_chain_hash_fast_t l_block_hash={0};
             dap_enc_base58_hex_to_hash( l_subcmd_str_arg, &l_block_hash); // Convert argument to hash
-            dap_chain_cell_t *l_cell = l_chain->cells;
-            do {
-                l_block = (dap_chain_block_t *)dap_chain_get_atom_by_hash(l_chain, &l_block_hash, &l_block_size, l_cell->id);
-                if (l_block)
-                    break;
-                l_cell = l_cell->hh.next;
-            } while (l_cell);
+            l_block = (dap_chain_block_t*) dap_chain_get_atom_by_hash( l_chain, &l_block_hash, &l_block_size);
             if ( l_block){
                 dap_chain_block_cache_t *l_block_cache = dap_chain_block_cs_cache_get_by_hash(l_blocks, &l_block_hash);
                 if ( l_block_cache ){
@@ -628,12 +622,8 @@ static int  s_add_atom_to_ledger(dap_chain_cs_blocks_t * a_blocks, dap_ledger_t
                 dap_chain_datum_token_t *l_token = (dap_chain_datum_token_t*) l_datum->data;
                 l_ret=dap_chain_ledger_token_load(a_ledger, l_token, l_datum->header.data_size);
             } break;
-            case DAP_CHAIN_DATUM_256_TOKEN_EMISSION: // 256
             case DAP_CHAIN_DATUM_TOKEN_EMISSION: {
-                dap_chain_datum_token_emission_t *l_token_em = (dap_chain_datum_token_emission_t*) l_datum->data;
-                l_token_em->hdr.type_value_256 = l_datum->header.type_id == DAP_CHAIN_DATUM_256_TOKEN_EMISSION ?
-                                                true : false;
-                l_ret=dap_chain_ledger_token_emission_load(a_ledger, l_token_em, l_datum->header.data_size);
+                l_ret=dap_chain_ledger_token_emission_load(a_ledger, l_datum->data, l_datum->header.data_size);
             } break;
             case DAP_CHAIN_DATUM_TX: {
                 dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*) l_datum->data;
@@ -908,11 +898,10 @@ static size_t s_callback_atom_get_static_hdr_size(void)
  * @param a_chain
  * @return
  */
-static dap_chain_atom_iter_t* s_callback_atom_iter_create(dap_chain_t * a_chain, dap_chain_cell_id_t a_cell_id)
+static dap_chain_atom_iter_t* s_callback_atom_iter_create(dap_chain_t * a_chain )
 {
     dap_chain_atom_iter_t * l_atom_iter = DAP_NEW_Z(dap_chain_atom_iter_t);
     l_atom_iter->chain = a_chain;
-    l_atom_iter->cell_id.uint64 = a_cell_id.uint64;
     l_atom_iter->_inheritor = DAP_NEW_Z(dap_chain_cs_blocks_iter_t);
     ITER_PVT(l_atom_iter)->blocks = DAP_CHAIN_CS_BLOCKS(a_chain);
 
@@ -931,7 +920,7 @@ static dap_chain_atom_iter_t* s_callback_atom_iter_create_from(dap_chain_t * a_c
     if (a_atom && a_atom_size){
         dap_chain_hash_fast_t l_atom_hash;
         dap_hash_fast(a_atom, a_atom_size, &l_atom_hash);
-        dap_chain_atom_iter_t * l_atom_iter = s_callback_atom_iter_create(a_chain, a_chain->cells->id);
+        dap_chain_atom_iter_t * l_atom_iter = s_callback_atom_iter_create(a_chain);
         if (l_atom_iter){
             dap_chain_cs_blocks_t *l_blocks = DAP_CHAIN_CS_BLOCKS(a_chain);
             l_atom_iter->cur_item = ITER_PVT(l_atom_iter)->cache = dap_chain_block_cs_cache_get_by_hash(l_blocks, &l_atom_hash);
@@ -1162,7 +1151,8 @@ static size_t s_callback_add_datums(dap_chain_t *a_chain, dap_chain_datum_t **a_
     pthread_rwlock_wrlock(&l_blocks_pvt->datums_lock);
     if (!l_blocks->block_new) {
         l_blocks->block_new = dap_chain_block_new(&l_blocks_pvt->block_cache_last->block_hash, &l_blocks->block_new_size);
-        l_blocks->block_new->hdr.cell_id.uint64 = a_chain->cells->id.uint64;
+        dap_chain_net_t *l_net = dap_chain_net_by_id(l_blocks->chain->net_id);
+        l_blocks->block_new->hdr.cell_id.uint64 = l_net->pub.cell_id.uint64;
         l_blocks->block_new->hdr.chain_id.uint64 = l_blocks->chain->id.uint64;
     }
     for (size_t i = 0; i < a_datums_count; i++) {
diff --git a/modules/type/dag/CMakeLists.txt b/modules/type/dag/CMakeLists.txt
index d4912385dcf81e7f0630642cecb0109f70bf244a..7ba78b85c68258118ad2b67a6b64c8ff1052c7be 100644
--- a/modules/type/dag/CMakeLists.txt
+++ b/modules/type/dag/CMakeLists.txt
@@ -5,7 +5,7 @@ file(GLOB DAP_CHAIN_DAG_SRCS *.c)
 file(GLOB DAP_CHAIN_DAG_HEADERS include/*.h)
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_DAG_SRCS} ${DAP_CHAIN_DAG_HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_net dap_chain_global_db)
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_link_libraries(dap_chain_cs_dag dap_core dap_crypto dap_chain dap_chain_net dap_chain_global_db)
+target_include_directories(dap_chain_cs_dag INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
 target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../3rdparty/uthash/src)
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index 15640be1d5286e7a0fb538a503b2013051c5b529..837281f0b6dbbd42dcfc8a64ad9f7d93e9f7f864 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -89,7 +89,7 @@ static dap_chain_atom_ptr_t s_chain_callback_atom_add_from_treshold(dap_chain_t
 static dap_chain_atom_verify_res_t s_chain_callback_atom_verify(dap_chain_t * a_chain, dap_chain_atom_ptr_t , size_t);                   //    Verify new event in dag
 static size_t s_chain_callback_atom_get_static_hdr_size(void);                               //    Get dag event header size
 
-static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain, dap_chain_cell_id_t a_cell_id);
+static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain );
 static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create_from(dap_chain_t *  ,
                                                                      dap_chain_atom_ptr_t , size_t);
 
@@ -203,6 +203,13 @@ int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
 
     a_chain->callback_add_datums = s_chain_callback_datums_pool_proc;
 
+    // Datum operations callbacks
+/*
+    a_chain->callback_datum_iter_create = s_chain_callback_datum_iter_create; // Datum iterator create
+    a_chain->callback_datum_iter_delete = s_chain_callback_datum_iter_delete; // Datum iterator delete
+    a_chain->callback_datum_iter_get_first = s_chain_callback_datum_iter_get_first; // Get the fisrt datum from chain
+    a_chain->callback_datum_iter_get_next = s_chain_callback_datum_iter_get_next; // Get the next datum from chain from the current one
+*/
     // Others
     a_chain->_inheritor = l_dag;
 
@@ -296,15 +303,10 @@ static int s_dap_chain_add_atom_to_ledger(dap_chain_cs_dag_t * a_dag, dap_ledger
             return dap_chain_ledger_token_load(a_ledger, l_token, l_datum->header.data_size);
         }
         break;
-        case DAP_CHAIN_DATUM_256_TOKEN_EMISSION: // 256
         case DAP_CHAIN_DATUM_TOKEN_EMISSION: {
-            dap_chain_datum_token_emission_t *l_token_em = (dap_chain_datum_token_emission_t*) l_datum->data;
-            l_token_em->hdr.type_value_256 = l_datum->header.type_id == DAP_CHAIN_DATUM_256_TOKEN_EMISSION ?
-                                                true : false;
-            return dap_chain_ledger_token_emission_load(a_ledger, l_token_em, l_datum->header.data_size);
+            return dap_chain_ledger_token_emission_load(a_ledger, l_datum->data, l_datum->header.data_size);
         }
         break;
-        case DAP_CHAIN_DATUM_256_TX: // 256
         case DAP_CHAIN_DATUM_TX: {
             dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*) l_datum->data;
             // don't save bad transactions to base
@@ -505,7 +507,12 @@ static size_t s_chain_callback_datums_pool_proc(dap_chain_t * a_chain, dap_chain
     dap_chain_hash_fast_t * l_hashes = l_hashes_size ?DAP_NEW_Z_SIZE(dap_chain_hash_fast_t,
                                              sizeof(dap_chain_hash_fast_t) * l_hashes_size) : NULL;
     size_t l_hashes_linked = 0;
-    dap_chain_cell_t *l_cell = NULL;
+    dap_chain_net_t *l_net = dap_chain_net_by_id(a_chain->net_id);
+    dap_chain_cell_id_t l_cell_id = {
+        .uint64 = l_net ? l_net->pub.cell_id.uint64 : 0
+    };
+    dap_chain_cell_t *l_cell = dap_chain_cell_find_by_id(a_chain, l_cell_id);
+
     for (size_t d = 0; d <a_datums_count ; d++){
         dap_chain_datum_t * l_datum = a_datums[d];
         if(l_datum == NULL){ // Was wrong datum thats not passed checks
@@ -581,9 +588,11 @@ static size_t s_chain_callback_datums_pool_proc(dap_chain_t * a_chain, dap_chain
                 l_event = l_dag->callback_cs_event_create(l_dag,l_datum,l_hashes,l_hashes_linked,&l_event_size);
             if ( l_event&&l_event_size){ // Event is created
                 if (l_dag->is_add_directy) {
-                    l_cell = a_chain->cells;
                     if (s_chain_callback_atom_add(a_chain, l_event, l_event_size) == ATOM_ACCEPT) {
                         // add events to file
+                        if (!l_cell) {
+                            l_cell = dap_chain_cell_create_fill(a_chain, l_cell_id);
+                        }
                         if (dap_chain_cell_file_append(l_cell, l_event, l_event_size )  < 0) {
                             log_it(L_ERROR, "Can't add new event to the file '%s'", l_cell->file_storage_path);
                             continue;
@@ -597,7 +606,7 @@ static size_t s_chain_callback_datums_pool_proc(dap_chain_t * a_chain, dap_chain
                                 l_atom_treshold = s_chain_callback_atom_add_from_treshold(a_chain, &l_atom_treshold_size);
                                 // add into file
                                 if(l_atom_treshold) {
-                                    int l_res = dap_chain_cell_file_append(a_chain->cells, l_atom_treshold, l_atom_treshold_size);
+                                    int l_res = dap_chain_cell_file_append(l_cell, l_atom_treshold, l_atom_treshold_size);
                                     if(l_res < 0) {
                                         log_it(L_ERROR, "Can't save event %p from treshold to the file '%s'",
                                                 l_atom_treshold, l_cell ? l_cell->file_storage_path : "[null]");
@@ -656,8 +665,9 @@ static size_t s_chain_callback_datums_pool_proc(dap_chain_t * a_chain, dap_chain
         }
     }
     DAP_DELETE(l_hashes);
-    if (l_cell)
+    if (l_cell) {
         dap_chain_cell_close(l_cell);
+    }
     dap_chain_global_db_objs_delete(l_events_round_new, l_events_round_new_size);
     return  l_datum_processed;
 }
@@ -973,11 +983,10 @@ static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create_from(dap_chain_t
  * @param a_chain
  * @return
  */
-static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain, dap_chain_cell_id_t a_cell_id)
+static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain )
 {
     dap_chain_atom_iter_t * l_atom_iter = DAP_NEW_Z(dap_chain_atom_iter_t);
     l_atom_iter->chain = a_chain;
-    l_atom_iter->cell_id = a_cell_id;
     pthread_rwlock_rdlock(&a_chain->atoms_rwlock);
 #ifdef WIN32
     log_it(L_DEBUG, "! Create caller id %lu", GetThreadId(GetCurrentThread()));
@@ -1022,14 +1031,7 @@ static dap_chain_atom_ptr_t s_chain_callback_atom_iter_get_first(dap_chain_atom_
     assert(l_dag);
     dap_chain_cs_dag_pvt_t *l_dag_pvt = PVT(l_dag);
     assert(l_dag_pvt);
-    a_atom_iter->cur_item = NULL;
-    dap_chain_cs_dag_event_item_t *l_item_tmp, *l_item_cur;
-    HASH_ITER(hh, l_dag_pvt->events, l_item_cur, l_item_tmp) {
-        if (l_item_cur->event->header.cell_id.uint64 == a_atom_iter->cell_id.uint64) {
-            a_atom_iter->cur_item = l_item_cur;
-            break;
-        }
-    }
+    a_atom_iter->cur_item = l_dag_pvt->events;
     if ( a_atom_iter->cur_item ){
         a_atom_iter->cur = ((dap_chain_cs_dag_event_item_t*) a_atom_iter->cur_item)->event;
         a_atom_iter->cur_size = ((dap_chain_cs_dag_event_item_t*) a_atom_iter->cur_item)->event_size;
@@ -1177,20 +1179,21 @@ static dap_chain_datum_tx_t* s_chain_callback_atom_iter_find_by_tx_hash(dap_chai
  */
 static dap_chain_atom_ptr_t s_chain_callback_atom_iter_get_next( dap_chain_atom_iter_t * a_atom_iter,size_t * a_atom_size )
 {
-    dap_chain_cs_dag_event_item_t * l_event_item = (dap_chain_cs_dag_event_item_t*) a_atom_iter->cur_item;
-    while (l_event_item) {
-        l_event_item = (dap_chain_cs_dag_event_item_t *)l_event_item->hh.next;
-        if (l_event_item && l_event_item->event->header.cell_id.uint64 == a_atom_iter->cell_id.uint64)
-            break;
-    }
-    // if l_event_item=NULL then items are over
-    a_atom_iter->cur_item = l_event_item;
-    a_atom_iter->cur = l_event_item ? l_event_item->event : NULL;
-    a_atom_iter->cur_size = a_atom_iter->cur ? l_event_item->event_size : 0;
-    a_atom_iter->cur_hash = l_event_item ? &l_event_item->hash : NULL;
-    if(a_atom_size)
-        *a_atom_size = a_atom_iter->cur_size;
-    return a_atom_iter->cur;
+    if (a_atom_iter->cur ){
+        //dap_chain_cs_dag_pvt_t* l_dag_pvt = PVT(DAP_CHAIN_CS_DAG(a_atom_iter->chain));
+        dap_chain_cs_dag_event_item_t * l_event_item = (dap_chain_cs_dag_event_item_t*) a_atom_iter->cur_item;
+        a_atom_iter->cur_item = l_event_item->hh.next;
+        l_event_item = (dap_chain_cs_dag_event_item_t*) a_atom_iter->cur_item;
+        // if l_event_item=NULL then items are over
+        a_atom_iter->cur = l_event_item ? l_event_item->event : NULL;
+        a_atom_iter->cur_size = a_atom_iter->cur ? l_event_item->event_size : 0;
+        a_atom_iter->cur_hash = l_event_item ? &l_event_item->hash : NULL;
+        if(a_atom_size)
+            *a_atom_size = a_atom_iter->cur_size;
+        return a_atom_iter->cur;
+    }else
+        return NULL;
+
 }
 
 /**
@@ -1341,16 +1344,24 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
             }
             // write events to file and delete events from db
             if(l_list_to_del) {
-                if (dap_chain_cell_file_update(l_chain->cells) > 0) {
-                    // delete events from db
-                    dap_list_t *l_list_tmp = l_list_to_del;
-                    while(l_list_tmp) {
-                        char *l_key = strdup((char*) l_list_tmp->data);
-                        dap_chain_global_db_gr_del(l_key, l_dag->gdb_group_events_round_new);
-                        l_list_tmp = dap_list_next(l_list_tmp);
+                dap_chain_cell_id_t l_cell_id = {
+                    .uint64 = l_net ? l_net->pub.cell_id.uint64 : 0
+                };
+                dap_chain_cell_t *l_cell = dap_chain_cell_find_by_id(l_chain, l_cell_id);
+                if (!l_cell)
+                    l_cell = dap_chain_cell_create_fill(l_chain, l_cell_id);
+                if(l_cell) {
+                    if(dap_chain_cell_file_update(l_cell) > 0) {
+                        // delete events from db
+                        dap_list_t *l_list_tmp = l_list_to_del;
+                        while(l_list_tmp) {
+                            char *l_key = strdup((char*) l_list_tmp->data);
+                            dap_chain_global_db_gr_del(l_key, l_dag->gdb_group_events_round_new);
+                            l_list_tmp = dap_list_next(l_list_tmp);
+                        }
                     }
                 }
-                dap_chain_cell_close(l_chain->cells);
+                dap_chain_cell_close(l_cell);
                 dap_list_free(l_list_to_del);
             }
 
diff --git a/modules/wallet/CMakeLists.txt b/modules/wallet/CMakeLists.txt
index 4d61a3b9f8bb7201f8ac88c5cc54a4549f817732..65e9b46203484dadf47906ee5895639539a9d70f 100644
--- a/modules/wallet/CMakeLists.txt
+++ b/modules/wallet/CMakeLists.txt
@@ -6,7 +6,7 @@ file(GLOB DAP_CHAIN_WALLET_HEADERS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_WALLET_SRCS} ${DAP_CHAIN_WALLET_HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_net)
+target_link_libraries(dap_chain_wallet dap_core dap_crypto dap_chain dap_chain_net)
 
-target_include_directories(${PROJECT_NAME} INTERFACE .)
+target_include_directories(dap_chain_wallet INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
diff --git a/modules/wallet/dap_chain_wallet.c b/modules/wallet/dap_chain_wallet.c
index cd71a2ceff67e4d164b37a981f206167082efa5a..aca3c351158194545b7512780b5b9913b728ea28 100644
--- a/modules/wallet/dap_chain_wallet.c
+++ b/modules/wallet/dap_chain_wallet.c
@@ -423,16 +423,15 @@ dap_chain_wallet_t * dap_chain_wallet_open(const char * a_wallet_name, const cha
  * @param a_net_id
  * @return
  */
-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)
+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)
 {
     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 = uint256_0;
+#ifdef DAP_GLOBAL_IS_INT128
+    uint128_t l_balance = 0;
+#else
+    uint128_t l_balance = {};
+#endif
     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 51ffd4c91ba18f5af2488f0d9855736e30211c31..f1b3e81e59162a3c0c2156e2e5f5baffb0f2bbc4 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);
 
-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);
+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);
 
 int dap_chain_wallet_save_file( dap_chain_wallet_t * a_wallet);