diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ab29be8bec3899660ebc4f08a85eba57ee23ea1d..8409e5dcbe4792c074fb71d820f8162eed9fe3f3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -22,7 +22,17 @@ linux-amd64-tests:
     before_script: /opt/buildtools/prepare_environment.sh amd64-linux
     script:
       - mkdir build
-      - cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="new-hope, multisign" && make -j$(nproc) && ctest
+      - cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose
+
+
+linux-amd64-tests-clang:
+    extends: .tests
+    image: demlabs/amd64/debian-bullseye:linuxbuilder
+    before_script: /opt/buildtools/prepare_environment.sh amd64-linux
+    script:
+      - mkdir build
+      - cd build && cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose
+
 
 linux-arm32v7-tests:
     extends: .tests
@@ -30,7 +40,15 @@ linux-arm32v7-tests:
     before_script: /opt/buildtools/prepare_environment.sh arm32v7-linux
     script:
       - mkdir build
-      - cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="new-hope, multisign" && make -j$(nproc) && ctest
+      - cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose
+
+linux-arm32v7-tests-clang:
+    extends: .tests
+    image: demlabs/arm32v7/debian-bullseye:linuxbuilder
+    before_script: /opt/buildtools/prepare_environment.sh arm32v7-linux
+    script:
+      - mkdir build
+      - cd build && cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose
 
 linux-arm64v8-tests:
     extends: .tests
@@ -38,7 +56,15 @@ linux-arm64v8-tests:
     before_script: /opt/buildtools/prepare_environment.sh arm64-linux
     script:
       - mkdir build
-      - cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="new-hope, multisign" && make -j$(nproc) && ctest
+      - cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose
+
+linux-arm64v8-tests-clang:
+    extends: .tests
+    image: demlabs/arm64v8/debian-bullseye:linuxbuilder
+    before_script: /opt/buildtools/prepare_environment.sh arm64-linux
+    script:
+      - mkdir build
+      - cd build && cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose
 
 windows-tests:
     extends: .tests
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7e09be08328f5b06625870b7bb0e7edce1fc9423..14b4ffc9cc4e88398632384998306e9256edf0ad 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,6 +10,11 @@ if (INSTALL_SDK)
     set(INSTALL_DAP_SDK ON)
 endif()
 
+# problem in /usr/include/linux/netlink.h:99:24: note: expanded from macro 'NLMSG_OK' (nlh)->nlmsg_len <= (len)
+if(CMAKE_C_COMPILER MATCHES "clang")
+    add_compile_options(-Wno-sign-compare)
+endif()
+
 if(NOT DEFINED CELLFRAME_MODULES)
     include (dap-sdk/cmake/OS_Detection.cmake)
 
@@ -45,6 +50,7 @@ else()
 endif(NOT DAP_INT128_SUPPORT)
 
 if (BUILD_CELLFRAME_SDK_TESTS)
+    enable_testing()
     add_definitions("-DDAP_LEDGER_TEST")
 endif()
 
diff --git a/modules/common/CMakeLists.txt b/modules/common/CMakeLists.txt
index 1ff2e061d1cf28fbc02baff162a3cd0688f0d8ff..08bba6401c2d7dadbf5acc6222342c9a6592c74b 100644
--- a/modules/common/CMakeLists.txt
+++ b/modules/common/CMakeLists.txt
@@ -6,6 +6,10 @@ file(GLOB DAP_CHAIN_COMMON_HEADERS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_COMMON_SRCS} ${DAP_CHAIN_COMMON_HEADERS})
 
+if(BUILD_CELLFRAME_SDK_TESTS)
+    add_subdirectory(tests)
+endif()
+
 target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_json-c)
 target_include_directories(${PROJECT_NAME} PUBLIC include/ )
 target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../dap-sdk/3rdparty/json-c)
diff --git a/modules/common/include/dap_chain_datum_tx_in.h b/modules/common/include/dap_chain_datum_tx_in.h
index fcc2361c0594d537409972ea244e2eebe88fd661..c9276dcc748bcda0b7fe6a26c444934a161d2263 100644
--- a/modules/common/include/dap_chain_datum_tx_in.h
+++ b/modules/common/include/dap_chain_datum_tx_in.h
@@ -36,9 +36,9 @@ typedef struct dap_chain_tx_in{
     struct {
         dap_chain_tx_item_type_t type; /// @param    type            @brief Transaction item type
         dap_chain_hash_fast_t tx_prev_hash; /// @param tx_prev_hash    @brief Hash of the previous transaction. 0 for generation TX
-        uint32_t tx_out_prev_idx; ///      @param   tx_prev_idx     @brief Previous tx_out index. 0 for generation TX
-    } header; /// Only header's hash is used for verification
-} DAP_ALIGN_PACKED dap_chain_tx_in_t;
+        uint32_t tx_out_prev_idx DAP_ALIGNED(4); ///      @param   tx_prev_idx     @brief Previous tx_out index. 0 for generation TX
+    } DAP_PACKED header; /// Only header's hash is used for verification
+} DAP_PACKED dap_chain_tx_in_t;
 
 typedef struct dap_chain_tx_used_out_item {
     dap_chain_hash_fast_t tx_hash_fast;
diff --git a/modules/common/include/dap_chain_datum_tx_in_cond.h b/modules/common/include/dap_chain_datum_tx_in_cond.h
index cea12feffd03168436d3e39a887bc95be2a2c5b1..d3033d7bc7e9a2ef4215a3bec50557d4ea7c6157 100644
--- a/modules/common/include/dap_chain_datum_tx_in_cond.h
+++ b/modules/common/include/dap_chain_datum_tx_in_cond.h
@@ -34,9 +34,9 @@
 
 typedef struct dap_chain_tx_in_cond {
     struct {
-        dap_chain_tx_item_type_t type :8; /// @param    type            @brief Transaction item type
+        dap_chain_tx_item_type_t type; /// @param    type            @brief Transaction item type
         dap_chain_hash_fast_t tx_prev_hash; /// @param tx_prev_hash    @brief Hash of the previous transaction. 0 for generation TX
-        uint32_t tx_out_prev_idx; ///      @param   tx_prev_idx     @brief Previous tx_out index. 0 for generation TX
-        uint32_t receipt_idx;
-    } header;
-} DAP_ALIGN_PACKED dap_chain_tx_in_cond_t;
+        uint32_t tx_out_prev_idx DAP_ALIGNED(4); ///      @param   tx_prev_idx     @brief Previous tx_out index. 0 for generation TX
+        uint32_t receipt_idx DAP_ALIGNED(4);
+    } DAP_PACKED header; /// Only header's hash is used for verification
+} DAP_PACKED dap_chain_tx_in_cond_t;
diff --git a/modules/common/include/dap_chain_datum_tx_in_ems.h b/modules/common/include/dap_chain_datum_tx_in_ems.h
index f3aa0cfc0cbea2feeec70fe6d52368db142524ef..e9ca91fda6420ac5d6f8f988e5862867f058db54 100644
--- a/modules/common/include/dap_chain_datum_tx_in_ems.h
+++ b/modules/common/include/dap_chain_datum_tx_in_ems.h
@@ -34,13 +34,12 @@
   */
 typedef struct dap_chain_tx_in_ems {
     struct {
-        dap_chain_tx_item_type_t type;
+        dap_chain_tx_item_type_t type ;
         char ticker[DAP_CHAIN_TICKER_SIZE_MAX];
-        uint8_t padding; // Padding
-        dap_chain_id_t token_emission_chain_id;
+        dap_chain_id_t token_emission_chain_id DAP_ALIGNED(4);
         dap_hash_fast_t token_emission_hash;
-    } header; /// Only header's hash is used for verification
-} DAP_ALIGN_PACKED dap_chain_tx_in_ems_t;
+    } DAP_PACKED header; /// Only header's hash is used for verification
+} DAP_PACKED dap_chain_tx_in_ems_t;
 
 
 /**
diff --git a/modules/common/include/dap_chain_datum_tx_out.h b/modules/common/include/dap_chain_datum_tx_out.h
index 19e136671f38df6b4b18bd401262dabaff7440aa..939ea68fe562c61ebc077f789ac4701df1d14b60 100644
--- a/modules/common/include/dap_chain_datum_tx_out.h
+++ b/modules/common/include/dap_chain_datum_tx_out.h
@@ -35,16 +35,16 @@
 typedef struct dap_chain_tx_out_old {
     struct {
         dap_chain_tx_item_type_t type; ///           @param    type            @brief  Transaction item type
-        uint64_t value; ///                       @param    value           @brief  Number of Datoshis ( DAP/10^9 ) to be transfered
-    } header; /// Only header's hash is used for verification
+        uint64_t value DAP_ALIGNED(8); ///                       @param    value           @brief  Number of Datoshis ( DAP/10^9 ) to be transfered
+    } DAP_PACKED header; /// Only header's hash is used for verification
     dap_chain_addr_t addr; ////
-} DAP_ALIGN_PACKED dap_chain_tx_out_old_t;
+} DAP_PACKED dap_chain_tx_out_old_t;
 
 //256
 typedef struct dap_chain_tx_out {
     struct {
         dap_chain_tx_item_type_t type; ///           @param    type            @brief  Transaction item type
         uint256_t value; ///                       @param    value           @brief  Number of Datoshis ( DAP/10^9 ) to be transfered
-    } header;
+    } DAP_PACKED header; /// Only header's hash is used for verification
     dap_chain_addr_t addr; ////
-} DAP_ALIGN_PACKED dap_chain_tx_out_t;
+} DAP_PACKED dap_chain_tx_out_t;
diff --git a/modules/common/include/dap_chain_datum_tx_out_ext.h b/modules/common/include/dap_chain_datum_tx_out_ext.h
index eeece8e4445ab969d040882578357ff769174abb..038c6514bc75b366615ec215f81f528b835c6fb7 100644
--- a/modules/common/include/dap_chain_datum_tx_out_ext.h
+++ b/modules/common/include/dap_chain_datum_tx_out_ext.h
@@ -32,8 +32,8 @@
 typedef struct dap_chain_tx_out_ext{
     struct {
         dap_chain_tx_item_type_t type;     // Transaction item type - should be TX_ITEM_TYPE_OUT_EXT
-        uint256_t value;                   // Number of Datoshis ( DAP/10^9 ) to be transfered
-    } header;                              // Only header's hash is used for verification
+        uint256_t value;                   // Number of Datoshis ( DAP/10^8 ) to be transfered
+    } DAP_PACKED header;                              // Only header's hash is used for verification
     dap_chain_addr_t addr;                 // Address to transfer to
     const char token[DAP_CHAIN_TICKER_SIZE_MAX]; // Which token is transferred
-} DAP_ALIGN_PACKED dap_chain_tx_out_ext_t;
+} DAP_PACKED dap_chain_tx_out_ext_t;
diff --git a/modules/common/include/dap_chain_datum_tx_pkey.h b/modules/common/include/dap_chain_datum_tx_pkey.h
index cfea7b332887388ea590c365cfafff4136e939e1..f2fb8efb6dec0aab02da272e904eadb5ead30a70 100644
--- a/modules/common/include/dap_chain_datum_tx_pkey.h
+++ b/modules/common/include/dap_chain_datum_tx_pkey.h
@@ -35,8 +35,8 @@ typedef struct dap_chain_tx_pkey{
     struct {
         dap_chain_tx_item_type_t type; /// @param    type            @brief Transaction item type
         dap_sign_type_t sig_type; /// Signature type
-        uint32_t sig_size; /// Signature size
-    } header; /// Only header's hash is used for verification
+        uint32_t sig_size DAP_ALIGNED(4); /// Signature size
+    } DAP_PACKED header; /// Only header's hash is used for verification
     uint32_t seq_no; /// Sequence number, out of the header so could be changed during reorganization
     uint8_t pkey[]; /// @param sig @brief raw pkey dat
-} DAP_ALIGN_PACKED dap_chain_tx_pkey_t;
+} DAP_PACKED dap_chain_tx_pkey_t;
diff --git a/modules/common/include/dap_chain_datum_tx_sig.h b/modules/common/include/dap_chain_datum_tx_sig.h
index 8d6c4f27aa1f57d1f93a306c12c6c421bd325a09..7b02845b0c54c0508549aea2c65fe2c9ece171f7 100644
--- a/modules/common/include/dap_chain_datum_tx_sig.h
+++ b/modules/common/include/dap_chain_datum_tx_sig.h
@@ -36,7 +36,7 @@
 typedef struct dap_chain_tx_sig{
     struct {
         dap_chain_tx_item_type_t type; /// @param    type            @brief Transaction item type
-        uint32_t sig_size; /// Signature size
-    } header; /// Only header's hash is used for verification
+        uint32_t sig_size DAP_ALIGNED(4); /// Signature size
+    } DAP_PACKED header; /// Only header's hash is used for verification
     uint8_t sig[]; /// @param sig @brief raw signature data
-} DAP_ALIGN_PACKED dap_chain_tx_sig_t;
+} DAP_PACKED dap_chain_tx_sig_t;
diff --git a/modules/common/include/dap_chain_datum_tx_tsd.h b/modules/common/include/dap_chain_datum_tx_tsd.h
index 825ce2b953047774404d15560364205d1b66699b..fc78dcd320ea005a7f01ef03cb68615cc840da0b 100644
--- a/modules/common/include/dap_chain_datum_tx_tsd.h
+++ b/modules/common/include/dap_chain_datum_tx_tsd.h
@@ -8,8 +8,8 @@
 typedef struct dap_chain_tx_tsd {
     struct {
         dap_chain_tx_item_type_t type;
-        size_t size;
-    } header;
+        uint64_t size DAP_ALIGNED(8);
+    } DAP_PACKED header;
     byte_t tsd[];
-} DAP_ALIGN_PACKED dap_chain_tx_tsd_t;
+} DAP_PACKED dap_chain_tx_tsd_t;
 
diff --git a/modules/common/tests/CMakeLists.txt b/modules/common/tests/CMakeLists.txt
new file mode 100755
index 0000000000000000000000000000000000000000..855a7c35a24a5d0005d07750992bb4bc71f23fc6
--- /dev/null
+++ b/modules/common/tests/CMakeLists.txt
@@ -0,0 +1,23 @@
+cmake_minimum_required(VERSION 3.10)
+
+project(struct-packing-test)
+
+file(GLOB DAP_CHAIN_TESTS_HEADERS include/*.h)
+file(GLOB DAP_CHAIN_TESTS_SRC *.c)
+
+add_executable(${PROJECT_NAME} ${DAP_CHAIN_TESTS_SRC} ${DAP_CHAIN_TESTS_HEADERS})
+
+target_link_libraries(${PROJECT_NAME} dap_test dap_core dap_crypto)
+
+include_directories(../include)
+
+if (DARWIN)
+    target_link_libraries(${PROJECT_NAME} bz2)
+endif()
+
+target_include_directories(${PROJECT_NAME} PUBLIC include)
+
+add_test(
+    NAME struct-packing-test
+    COMMAND struct-packing-test
+)
diff --git a/modules/common/tests/dap_struct_packing_tests.c b/modules/common/tests/dap_struct_packing_tests.c
new file mode 100644
index 0000000000000000000000000000000000000000..168dce8bc8becb2c4684156cb999084e60c1ff7f
--- /dev/null
+++ b/modules/common/tests/dap_struct_packing_tests.c
@@ -0,0 +1,146 @@
+#include "dap_struct_packing_tests.h"
+#include "dap_math_ops.h"
+#include "dap_chain_datum_tx_out.h"
+#include "dap_chain_datum_tx_in_cond.h"
+#include "dap_chain_datum_tx_in_ems.h"
+#include "dap_chain_datum_tx_in.h"
+#include "dap_chain_datum_tx_out_cond.h"
+#include "dap_chain_datum_tx_out_ext.h"
+#include "dap_chain_datum_tx_pkey.h"
+#include "dap_chain_datum_tx_sig.h"
+#include "dap_chain_datum_tx_tsd.h"
+
+DAP_STATIC_INLINE int s_get_delta_addr(const void *a_addr_1, const void *a_addr_2)
+{
+    return a_addr_2 - a_addr_1;
+}
+
+static int s_chain_tx_in_cond_test()
+{
+    dap_print_module_name("dap_chain_tx_in_cond_test");
+    dap_chain_tx_in_cond_t s = {0};
+    dap_assert(sizeof(s) == 44, "size");
+    dap_assert(sizeof(s.header) == 44, "header size");
+    dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header");
+    dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type");
+    dap_assert(s_get_delta_addr(&s, &s.header.tx_prev_hash) == 1, "header.tx_prev_hash");
+    dap_assert(s_get_delta_addr(&s, &s.header.tx_out_prev_idx) == 36, "header.tx_out_prev_idx");
+    dap_assert(s_get_delta_addr(&s, &s.header.receipt_idx) == 40, "header.receipt_idx");
+    return 0;
+}
+
+static int s_chain_datum_tx_in_ems_test()
+{
+    dap_print_module_name("dap_chain_datum_tx_in_ems_test");
+    dap_chain_tx_in_ems_t s = {0};
+    dap_assert(sizeof(s) == 52, "size");
+    dap_assert(sizeof(s.header) == 52, "header size");
+    dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header");
+    dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type");
+    dap_assert(s_get_delta_addr(&s, &s.header.ticker) == 1, "header.ticker");
+    dap_assert(s_get_delta_addr(&s, &s.header.token_emission_chain_id) == 12, "header.tx_out_prev_idx");
+    dap_assert(s_get_delta_addr(&s, &s.header.token_emission_hash) == 20, "header.receipt_idx");
+    return 0;
+}
+
+static int s_chain_tx_in_test()
+{
+    dap_print_module_name("dap_chain_tx_in_test");
+    dap_chain_tx_in_t s = {0};   
+    dap_assert(sizeof(s) == 40, "size");
+    dap_assert(sizeof(s.header) == 40, "header size");
+    dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header");
+    dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type");
+    dap_assert(s_get_delta_addr(&s, &s.header.tx_prev_hash) == 1, "header.tx_prev_hash");
+    dap_assert(s_get_delta_addr(&s, &s.header.tx_out_prev_idx) == 36, "header.tx_out_prev_idx");
+    return 0;
+}
+
+static int s_chain_tx_out_ext_test()
+{
+    dap_print_module_name("dap_chain_tx_out_ext_test");
+    dap_chain_tx_out_ext_t s = {0};
+    dap_assert(sizeof(s) == 120, "size");
+    dap_assert(sizeof(s.header) == 33, "header size");
+    dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header");
+    dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type");
+    dap_assert(s_get_delta_addr(&s, &s.header.value) == 1, "header.value");
+    dap_assert(s_get_delta_addr(&s, &s.addr) == 33, "addr");
+    dap_assert(s_get_delta_addr(&s, &s.token) == 110, "token");
+    return 0;
+}
+
+static int s_chain_tx_out_test()
+{
+    dap_print_module_name("dap_chain_tx_out_test");
+    dap_chain_tx_out_old_t s_old = {0};
+    dap_assert(sizeof(s_old) == 93, "old size");
+    dap_assert(sizeof(s_old.header) == 16, "old.header size");
+    dap_assert(s_get_delta_addr(&s_old, &s_old.header) == 0, "old.header");
+    dap_assert(s_get_delta_addr(&s_old, &s_old.header.type) == 0, "old.header.type");
+    dap_assert(s_get_delta_addr(&s_old, &s_old.header.value) == 8, "old.header.value");
+    dap_assert(s_get_delta_addr(&s_old, &s_old.addr) == 16, "old.header.addr");
+
+
+    dap_chain_tx_out_t s = {0};
+    dap_assert(sizeof(s) == 110, "new size");
+    dap_assert(sizeof(s.header) == 33, "new.header size");
+    dap_assert(s_get_delta_addr(&s, &s.header) == 0, "new.header");
+    dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "new.header.type");
+    dap_assert(s_get_delta_addr(&s, &s.header.value) == 1, "new.header.value");
+    dap_assert(s_get_delta_addr(&s, &s.addr) == 33, "new.header.addr");
+    return 0;
+}
+
+static int s_chain_tx_pkey_test()
+{
+    dap_print_module_name("dap_chain_tx_pkey_test");
+    dap_chain_tx_pkey_t s = {0};
+    dap_assert(sizeof(s) == 16, "size");
+    dap_assert(sizeof(s.header) == 12, "header size");
+    dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header");
+    dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type");
+    dap_assert(s_get_delta_addr(&s, &s.header.sig_type) == 1, "header.sig_type");
+    dap_assert(s_get_delta_addr(&s, &s.header.sig_size) == 8, "header.sig_size");
+    dap_assert(s_get_delta_addr(&s, &s.seq_no) == 12, "seq_no");
+    dap_assert(s_get_delta_addr(&s, &s.pkey) == 16, "pkey");
+    return 0;
+}
+
+static int s_chain_tx_sig_test()
+{
+    dap_print_module_name("dap_chain_tx_sig_test");
+    dap_chain_tx_sig_t s = {0};
+    dap_assert(sizeof(s) == 8, "size");
+    dap_assert(sizeof(s.header) == 8, "header size");
+    dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header");
+    dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type");
+    dap_assert(s_get_delta_addr(&s, &s.header.sig_size) == 4, "header.sig_size");
+    dap_assert(s_get_delta_addr(&s, &s.sig) == 8, "sig");
+    return 0;
+}
+
+static int s_chain_tx_tsd_test()
+{
+    dap_print_module_name("dap_chain_tx_sig_test");
+    dap_chain_tx_tsd_t s = {0};
+    dap_assert(sizeof(s) == 16, "size");
+    dap_assert(sizeof(s.header) == 16, "header size");
+    dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header");
+    dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type");
+    dap_assert(s_get_delta_addr(&s, &s.header.size) == 8, "header.size");
+    dap_assert(s_get_delta_addr(&s, &s.tsd) == 16, "tsd");
+    return 0;
+}
+
+void dap_struct_packing_test_run(void){
+    dap_print_module_name("dap_struct_packing");
+    s_chain_tx_in_cond_test();
+    s_chain_datum_tx_in_ems_test();
+    s_chain_tx_in_test();
+    s_chain_tx_out_ext_test();
+    s_chain_tx_out_test();
+    s_chain_tx_pkey_test();
+    s_chain_tx_sig_test();
+    s_chain_tx_tsd_test();
+}
\ No newline at end of file
diff --git a/modules/common/tests/include/dap_struct_packing_tests.h b/modules/common/tests/include/dap_struct_packing_tests.h
new file mode 100644
index 0000000000000000000000000000000000000000..62b80b50dd950890144c954e7446d22aa44a6ddc
--- /dev/null
+++ b/modules/common/tests/include/dap_struct_packing_tests.h
@@ -0,0 +1,4 @@
+#include "dap_test.h"
+
+void dap_struct_packing_test_run(void);
+//dap_ledger_t *dap_chain_ledger_create_test();
diff --git a/modules/common/tests/main.c b/modules/common/tests/main.c
new file mode 100644
index 0000000000000000000000000000000000000000..5ac47ee838756704ecca1908790d98776dd8f503
--- /dev/null
+++ b/modules/common/tests/main.c
@@ -0,0 +1,6 @@
+#include "dap_struct_packing_tests.h"
+
+int main(void){
+    dap_struct_packing_test_run();
+    return 0;
+}
\ No newline at end of file