diff --git a/.gitmodules b/.gitmodules
index f31f256df596e3e938234d1081ac70db5c7d9780..d1266e5b0fef9998ceca302403657426713e0b5d 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -67,3 +67,9 @@
 [submodule "libdap-server-http-db"]
 	path = libdap-server-http-db
 	url = https://gitlab.demlabs.net/cellframe/libdap-server-http-db.git
+[submodule "libdap-chain-common"]
+	path = libdap-chain-common
+	url = https://gitlab.demlabs.net/cellframe/libdap-chain-common.git
+[submodule "libdap-chain-common-python"]
+	path = libdap-chain-common-python
+	url = https://gitlab.demlabs.net/cellframe/libdap-chain-common-python.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2603c2ce4f01aaa1e6bf026530ce5ef2c4ba171a..48e0df13cd23cff2fbf23e78638ad0475e56ca2c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,6 +42,13 @@ if (NOT (${SUBMODULES_NO_BUILD} MATCHES ON))
             "-fpic"  
        )
    endif()
+   if (NOT (TARGET dap_chain_common))
+       add_subdirectory(libdap-chain-common)
+       target_compile_options(
+            dap_chain_common PRIVATE
+            "-fpic"
+       )
+   endif()
    if (NOT (TARGET dap_chain_mempool))
        add_subdirectory(libdap-chain-mempool)
        target_compile_options(
@@ -175,6 +182,13 @@ if (NOT (${SUBMODULES_NO_BUILD} MATCHES ON))
              "-fpic"
         )
     endif()
+    if (NOT (TARGET dap_chain_common_python_module))
+       add_subdirectory(libdap-chain-common-python)
+       target_compile_options(
+            dap_chain_common_python_module PRIVATE
+            "-fpic"
+       )
+    endif()
 endif()
 #add_definitions("-DDAP_APP_NAME=\"TestPRJ\" -DSYSTEM_CONFIGS_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\"")
 
@@ -189,7 +203,7 @@ add_library(${PROJECT_NAME} STATIC ${CHAIN_PYTHON_SRCS} ${CHAIN_PYTHON_HEADERS})
 
 target_link_libraries(${PROJECT_NAME})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_crypto dap_server_core dap_chain_net dap_crypto_python_module dap_python_module)
+target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_crypto dap_server_core dap_chain_net dap_crypto_python_module dap_python_module dap_chain_common_python_module)
 
 target_include_directories(${PROJECT_NAME} PUBLIC include/ )
 
diff --git a/include/libdap-chain-python.h b/include/libdap-chain-python.h
index 9874ea04b8b394dc8ec7dc8d21a88484170f9436..aee6083e55a232c4a574a69a0b3ddb6e64e0d915 100644
--- a/include/libdap-chain-python.h
+++ b/include/libdap-chain-python.h
@@ -13,7 +13,7 @@
 #include "dap_chain.h"
 #include "dap_chain_node_client.h"
 #include "wrapping_dap_chain_ledger.h"
-#include "wrapping_dap_chain_common_objects.h"
+#include "wrapping_dap_chain_common.h"
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/include/wrapping_dap_chain_common.h b/include/wrapping_dap_chain_common.h
deleted file mode 100644
index ff76943b5638194fa2d1a16eba7c821a5fe55068..0000000000000000000000000000000000000000
--- a/include/wrapping_dap_chain_common.h
+++ /dev/null
@@ -1,81 +0,0 @@
-#ifndef _WRAPPING_DAP_CHAIN_COMMON_
-#define _WRAPPING_DAP_CHAIN_COMMON_
-
-#include "Python.h"
-#include "dap_chain_common.h"
-#include "wrapping_dap_chain_common_objects.h"
-#include "libdap_crypto_key_python.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct PyDapChainCommon{
-    PyObject_HEAD
-}PyDapChainCommonObject;
-
-PyObject *dap_chain_hash_slow_to_str_py(PyObject *self, PyObject *args);
-PyObject *dap_chain_str_to_hash_fast_py(PyObject *self, PyObject *args);
-PyObject *dap_chain_addr_to_str_py(PyObject *self, PyObject *args);
-PyObject *dap_chain_addr_from_str_py(PyObject *self, PyObject *args);
-PyObject *dap_chain_addr_fill_py(PyObject *self, PyObject *args);
-PyObject *dap_chain_addr_check_sum_py(PyObject *self, PyObject *args);
-
-static PyMethodDef PyDapChainCommonObjectMethods[] ={
-    {"hashSlowToStr", dap_chain_hash_slow_to_str_py, METH_VARARGS|METH_STATIC, ""},
-    {"strTpHashFast", dap_chain_str_to_hash_fast_py, METH_VARARGS|METH_STATIC, ""},
-    {"addrToStr", dap_chain_addr_to_str_py, METH_VARARGS|METH_STATIC, ""},
-    {"addrFromStr", dap_chain_addr_from_str_py, METH_VARARGS|METH_STATIC, ""},
-    {"addrFill", dap_chain_addr_fill_py, METH_VARARGS|METH_STATIC, ""},
-    {"addrCheckSum", dap_chain_addr_check_sum_py, METH_VARARGS|METH_STATIC, ""},
-    {NULL, NULL, 0, NULL}
-};
-
-static PyTypeObject ChainCommonObject_ChainCommonType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.Common",                                      /* tp_name */
-    sizeof(PyDapChainCommonObject),                               /* tp_basicsize */
-    0,                                                            /* tp_itemsize */
-    0,                                                            /* tp_dealloc */
-    0,                                                            /* tp_print */
-    0,                                                            /* tp_getattr */
-    0,                                                            /* tp_setattr */
-    0,                                                            /* tp_reserved */
-    0,                                                            /* tp_repr */
-    0,                                                            /* tp_as_number */
-    0,                                                            /* tp_as_sequence */
-    0,                                                            /* tp_as_mapping */
-    0,                                                            /* tp_hash  */
-    0,                                                            /* tp_call */
-    0,                                                            /* tp_str */
-    0,                                                            /* tp_getattro */
-    0,                                                            /* tp_setattro */
-    0,                                                            /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,                                      /* tp_flags */
-    "Chain common objects",                                              /* tp_doc */
-    0,		                                                      /* tp_traverse */
-    0,		                                                      /* tp_clear */
-    0,		                                                      /* tp_richcompare */
-    0,		                                                      /* tp_weaklistoffset */
-    0,		                                                      /* tp_iter */
-    0,		                                                      /* tp_iternext */
-    PyDapChainCommonObjectMethods,                                /* tp_methods */
-    0,                                                            /* tp_members */
-    0,                                                            /* tp_getset */
-    0,                                                            /* tp_base */
-    0,                                                            /* tp_dict */
-    0,                                                            /* tp_descr_get */
-    0,                                                            /* tp_descr_set */
-    0,                                                            /* tp_dictoffset */
-    0,                                                            /* tp_init */
-    0,                                                            /* tp_alloc */
-    PyType_GenericNew,                                            /* tp_new */
-
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //_WRAPPING_DAP_CHAIN_COMMON_
diff --git a/include/wrapping_dap_chain_common_objects.h b/include/wrapping_dap_chain_common_objects.h
deleted file mode 100644
index 23e9df37d54a26aac9db693c34acbcdd20225d32..0000000000000000000000000000000000000000
--- a/include/wrapping_dap_chain_common_objects.h
+++ /dev/null
@@ -1,423 +0,0 @@
-#ifndef _WRAPPING_DAP_CHAIN_COMMON_OBJECTS_
-#define _WRAPPING_DAP_CHAIN_COMMON_OBJECTS_
-
-#include "Python.h"
-#include "dap_chain_common.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* DAP Chain ID*/
-typedef struct PyDapChainId{
-    PyObject_HEAD
-    dap_chain_id_t id;
-}PyDapChainIdObject;
-
-static PyTypeObject DapChainIdObject_DapChainIdObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.ID",             /* tp_name */
-    sizeof(PyDapChainIdObject),      /* tp_basicsize */
-    0,                               /* tp_itemsize */
-    0,                               /* tp_dealloc */
-    0,                               /* tp_print */
-    0,                               /* tp_getattr */
-    0,                               /* tp_setattr */
-    0,                               /* tp_reserved */
-    0,                               /* tp_repr */
-    0,                               /* tp_as_number */
-    0,                               /* tp_as_sequence */
-    0,                               /* tp_as_mapping */
-    0,                               /* tp_hash  */
-    0,                               /* tp_call */
-    0,                               /* tp_str */
-    0,                               /* tp_getattro */
-    0,                               /* tp_setattro */
-    0,                               /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,         /* tp_flags */
-    "Chain id object",           /* tp_doc */
-    0,		                         /* tp_traverse */
-    0,		                         /* tp_clear */
-    0,		                         /* tp_richcompare */
-    0,                               /* tp_weaklistoffset */
-    0,		                         /* tp_iter */
-    0,		                         /* tp_iternext */
-    0,                               /* tp_methods */
-    0,                               /* tp_members */
-    0,                               /* tp_getset */
-    0,                               /* tp_base */
-    0,                               /* tp_dict */
-    0,                               /* tp_descr_get */
-    0,                               /* tp_descr_set */
-    0,                               /* tp_dictoffset */
-    0,                               /* tp_init */
-    0,                               /* tp_alloc */
-    PyType_GenericNew,               /* tp_new */
-};
-
-/*-------------------------------*/
-
-/* DAP chain cell id */
-
-typedef struct PyDapChainCellId{
-    PyObject_HEAD
-    dap_chain_cell_id_t id;
-}PyDapChainCellIdObject;
-
-static PyTypeObject DapChainCellIdObject_DapChainCellIdObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.CellID",             /* tp_name */
-    sizeof(PyDapChainCellIdObject),      /* tp_basicsize */
-    0,                               /* tp_itemsize */
-    0,                               /* tp_dealloc */
-    0,                               /* tp_print */
-    0,                               /* tp_getattr */
-    0,                               /* tp_setattr */
-    0,                               /* tp_reserved */
-    0,                               /* tp_repr */
-    0,                               /* tp_as_number */
-    0,                               /* tp_as_sequence */
-    0,                               /* tp_as_mapping */
-    0,                               /* tp_hash  */
-    0,                               /* tp_call */
-    0,                               /* tp_str */
-    0,                               /* tp_getattro */
-    0,                               /* tp_setattro */
-    0,                               /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,         /* tp_flags */
-    "Chain cell id object",           /* tp_doc */
-    0,		                         /* tp_traverse */
-    0,		                         /* tp_clear */
-    0,		                         /* tp_richcompare */
-    0,                               /* tp_weaklistoffset */
-    0,		                         /* tp_iter */
-    0,		                         /* tp_iternext */
-    0,                               /* tp_methods */
-    0,                               /* tp_members */
-    0,                               /* tp_getset */
-    0,                               /* tp_base */
-    0,                               /* tp_dict */
-    0,                               /* tp_descr_get */
-    0,                               /* tp_descr_set */
-    0,                               /* tp_dictoffset */
-    0,                               /* tp_init */
-    0,                               /* tp_alloc */
-    PyType_GenericNew,               /* tp_new */
-};
-
-/*-------------------------------*/
-
-/* DAP chain Addr */
-
-typedef struct PyDapChainNodeAddr{
-    PyObject_HEAD
-    dap_chain_node_addr_t *node_addr;
-}PyDapChainNodeAddrObject;
-
-static PyTypeObject DapChainNodeAddrObject_DapChainNodeAddrObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.NodeAddr",             /* tp_name */
-    sizeof(PyDapChainNodeAddrObject),      /* tp_basicsize */
-    0,                               /* tp_itemsize */
-    0,                               /* tp_dealloc */
-    0,                               /* tp_print */
-    0,                               /* tp_getattr */
-    0,                               /* tp_setattr */
-    0,                               /* tp_reserved */
-    0,                               /* tp_repr */
-    0,                               /* tp_as_number */
-    0,                               /* tp_as_sequence */
-    0,                               /* tp_as_mapping */
-    0,                               /* tp_hash  */
-    0,                               /* tp_call */
-    0,                               /* tp_str */
-    0,                               /* tp_getattro */
-    0,                               /* tp_setattro */
-    0,                               /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,         /* tp_flags */
-    "Chain node addr object",           /* tp_doc */
-    0,		                         /* tp_traverse */
-    0,		                         /* tp_clear */
-    0,		                         /* tp_richcompare */
-    0,                               /* tp_weaklistoffset */
-    0,		                         /* tp_iter */
-    0,		                         /* tp_iternext */
-    0,                               /* tp_methods */
-    0,                               /* tp_members */
-    0,                               /* tp_getset */
-    0,                               /* tp_base */
-    0,                               /* tp_dict */
-    0,                               /* tp_descr_get */
-    0,                               /* tp_descr_set */
-    0,                               /* tp_dictoffset */
-    0,                               /* tp_init */
-    0,                               /* tp_alloc */
-    PyType_GenericNew,               /* tp_new */
-};
-
-/*-------------------------------*/
-
-typedef struct PyDapChainNodeRole{
-    PyObject_HEAD
-    dap_chain_node_role_t *node_role;
-}PyDapChainNodeRoleObject;
-
-/* DAP Chain Net ID */
-
-typedef struct PyDapChainNetId{
-    PyObject_HEAD
-    dap_chain_net_id_t net_id;
-}PyDapChainNetIdObject; 
-
-static PyTypeObject DapChainNetIdObject_DapChainNetIdObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.NetID",          /* tp_name */
-    sizeof(PyDapChainNetIdObject),   /* tp_basicsize */
-    0,                               /* tp_itemsize */
-    0,                               /* tp_dealloc */
-    0,                               /* tp_print */
-    0,                               /* tp_getattr */
-    0,                               /* tp_setattr */
-    0,                               /* tp_reserved */
-    0,                               /* tp_repr */
-    0,                               /* tp_as_number */
-    0,                               /* tp_as_sequence */
-    0,                               /* tp_as_mapping */
-    0,                               /* tp_hash  */
-    0,                               /* tp_call */
-    0,                               /* tp_str */
-    0,                               /* tp_getattro */
-    0,                               /* tp_setattro */
-    0,                               /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,         /* tp_flags */
-    "Chain net id object",           /* tp_doc */
-    0,		                         /* tp_traverse */
-    0,		                         /* tp_clear */
-    0,		                         /* tp_richcompare */
-    0,                               /* tp_weaklistoffset */
-    0,		                         /* tp_iter */
-    0,		                         /* tp_iternext */
-    0,                               /* tp_methods */
-    0,                               /* tp_members */
-    0,                               /* tp_getset */
-    0,                               /* tp_base */
-    0,                               /* tp_dict */
-    0,                               /* tp_descr_get */
-    0,                               /* tp_descr_set */
-    0,                               /* tp_dictoffset */
-    0,                               /* tp_init */
-    0,                               /* tp_alloc */
-    PyType_GenericNew,               /* tp_new */
-};
-
-/* ------------------------------- */
-
-/* DAP chain Hash Slow Object */
-typedef struct PyDapChainHashSlow{
-    PyObject_HEAD
-    dap_chain_hash_slow_t *hash_slow;
-}PyDapChainHashSlowObject;
-
-static PyTypeObject DapChainHashSlowObject_DapChainHashSlowObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.HashSlow",       /* tp_name */
-    sizeof(PyDapChainHashSlowObject),/* tp_basicsize */
-    0,                               /* tp_itemsize */
-    0,                               /* tp_dealloc */
-    0,                               /* tp_print */
-    0,                               /* tp_getattr */
-    0,                               /* tp_setattr */
-    0,                               /* tp_reserved */
-    0,                               /* tp_repr */
-    0,                               /* tp_as_number */
-    0,                               /* tp_as_sequence */
-    0,                               /* tp_as_mapping */
-    0,                               /* tp_hash  */
-    0,                               /* tp_call */
-    0,                               /* tp_str */
-    0,                               /* tp_getattro */
-    0,                               /* tp_setattro */
-    0,                               /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,         /* tp_flags */
-    "Chain hash slow object",        /* tp_doc */
-    0,		                         /* tp_traverse */
-    0,		                         /* tp_clear */
-    0,		                         /* tp_richcompare */
-    0,                               /* tp_weaklistoffset */
-    0,		                         /* tp_iter */
-    0,		                         /* tp_iternext */
-    0,                               /* tp_methods */
-    0,                               /* tp_members */
-    0,                               /* tp_getset */
-    0,                               /* tp_base */
-    0,                               /* tp_dict */
-    0,                               /* tp_descr_get */
-    0,                               /* tp_descr_set */
-    0,                               /* tp_dictoffset */
-    0,                               /* tp_init */
-    0,                               /* tp_alloc */
-    PyType_GenericNew,               /* tp_new */
-};
-
-
-/* ---------------------------------- */
-/* DAP chain hash fast object */
-
-typedef struct PyDapChainHashFast{
-    PyObject_HEAD
-    dap_chain_hash_fast_t *hash_fast;
-}PyDapChainHashFastObject;
-
-static PyTypeObject DapChainHashFastObject_DapChainHashFastObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.HashFast",       /* tp_name */
-    sizeof(PyDapChainHashFastObject),/* tp_basicsize */
-    0,                               /* tp_itemsize */
-    0,                               /* tp_dealloc */
-    0,                               /* tp_print */
-    0,                               /* tp_getattr */
-    0,                               /* tp_setattr */
-    0,                               /* tp_reserved */
-    0,                               /* tp_repr */
-    0,                               /* tp_as_number */
-    0,                               /* tp_as_sequence */
-    0,                               /* tp_as_mapping */
-    0,                               /* tp_hash  */
-    0,                               /* tp_call */
-    0,                               /* tp_str */
-    0,                               /* tp_getattro */
-    0,                               /* tp_setattro */
-    0,                               /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,         /* tp_flags */
-    "Chain hash fast object",        /* tp_doc */
-    0,		                         /* tp_traverse */
-    0,		                         /* tp_clear */
-    0,		                         /* tp_richcompare */
-    0,                               /* tp_weaklistoffset */
-    0,		                         /* tp_iter */
-    0,		                         /* tp_iternext */
-    0,                               /* tp_methods */
-    0,                               /* tp_members */
-    0,                               /* tp_getset */
-    0,                               /* tp_base */
-    0,                               /* tp_dict */
-    0,                               /* tp_descr_get */
-    0,                               /* tp_descr_set */
-    0,                               /* tp_dictoffset */
-    0,                               /* tp_init */
-    0,                               /* tp_alloc */
-    PyType_GenericNew,               /* tp_new */
-};
-
-/* ----------------------------------- */
-
-typedef struct PyDapChainHashSlowKind{
-    PyObject_HEAD
-    dap_chain_hash_slow_kind_t *hash_slow_kind;
-}PyDapChainHashSlowKindObject;
-
-static PyTypeObject DapChainHashSlowKindObject_DapChainHashSlowKindObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.HashSlowKind",       /* tp_name */
-    sizeof(PyDapChainHashSlowKindObject),/* tp_basicsize */
-    0,                               /* tp_itemsize */
-    0,                               /* tp_dealloc */
-    0,                               /* tp_print */
-    0,                               /* tp_getattr */
-    0,                               /* tp_setattr */
-    0,                               /* tp_reserved */
-    0,                               /* tp_repr */
-    0,                               /* tp_as_number */
-    0,                               /* tp_as_sequence */
-    0,                               /* tp_as_mapping */
-    0,                               /* tp_hash  */
-    0,                               /* tp_call */
-    0,                               /* tp_str */
-    0,                               /* tp_getattro */
-    0,                               /* tp_setattro */
-    0,                               /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,         /* tp_flags */
-    "Chain hash slow kind object",        /* tp_doc */
-    0,		                         /* tp_traverse */
-    0,		                         /* tp_clear */
-    0,		                         /* tp_richcompare */
-    0,                               /* tp_weaklistoffset */
-    0,		                         /* tp_iter */
-    0,		                         /* tp_iternext */
-    0,                               /* tp_methods */
-    0,                               /* tp_members */
-    0,                               /* tp_getset */
-    0,                               /* tp_base */
-    0,                               /* tp_dict */
-    0,                               /* tp_descr_get */
-    0,                               /* tp_descr_set */
-    0,                               /* tp_dictoffset */
-    0,                               /* tp_init */
-    0,                               /* tp_alloc */
-    PyType_GenericNew,               /* tp_new */
-};
-
-/* ----------------------------------- */
-
-/* DAP chain addr object */
-typedef struct PyDapChainAddr{
-    PyObject_HEAD
-    dap_chain_addr_t *addr;
-}PyDapChainAddrObject;
-
-static PyTypeObject DapChainAddrObject_DapChainAddrObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.Addr",       /* tp_name */
-    sizeof(PyDapChainAddrObject),/* tp_basicsize */
-    0,                               /* tp_itemsize */
-    0,                               /* tp_dealloc */
-    0,                               /* tp_print */
-    0,                               /* tp_getattr */
-    0,                               /* tp_setattr */
-    0,                               /* tp_reserved */
-    0,                               /* tp_repr */
-    0,                               /* tp_as_number */
-    0,                               /* tp_as_sequence */
-    0,                               /* tp_as_mapping */
-    0,                               /* tp_hash  */
-    0,                               /* tp_call */
-    0,                               /* tp_str */
-    0,                               /* tp_getattro */
-    0,                               /* tp_setattro */
-    0,                               /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,         /* tp_flags */
-    "Chain addr object",             /* tp_doc */
-    0,		                         /* tp_traverse */
-    0,		                         /* tp_clear */
-    0,		                         /* tp_richcompare */
-    0,                               /* tp_weaklistoffset */
-    0,		                         /* tp_iter */
-    0,		                         /* tp_iternext */
-    0,                               /* tp_methods */
-    0,                               /* tp_members */
-    0,                               /* tp_getset */
-    0,                               /* tp_base */
-    0,                               /* tp_dict */
-    0,                               /* tp_descr_get */
-    0,                               /* tp_descr_set */
-    0,                               /* tp_dictoffset */
-    0,                               /* tp_init */
-    0,                               /* tp_alloc */
-    PyType_GenericNew,               /* tp_new */
-};
-
-/* ----------------------------- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //_WRAPPING_DAP_CHAIN_COMMON_OBJECTS_
diff --git a/include/wrapping_dap_chain_datum.h b/include/wrapping_dap_chain_datum.h
deleted file mode 100644
index 16ff7a38025bf8a5110791d1ae896f242c91c22c..0000000000000000000000000000000000000000
--- a/include/wrapping_dap_chain_datum.h
+++ /dev/null
@@ -1,163 +0,0 @@
-#ifndef _WRAPPING_DAP_CHAIN_DATUM_
-#define _WRAPPING_DAP_CHAIN_DATUM_
-#include "Python.h"
-#include "dap_chain_datum.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* DAP Chain datum type id */
-typedef struct PyDapChainDatumTypeId{
-    PyObject_HEAD
-    dap_chain_datum_typeid_t *type_id;
-}PyDapChainDatumTypeIdObject;
-
-static PyTypeObject DapChainDatumTypeIdObject_DapChainDatumTypeIdObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.DatumTypeId",          /* tp_name */
-    sizeof(PyDapChainDatumTypeIdObject),   /* tp_basicsize */
-    0,                               /* tp_itemsize */
-    0,                               /* tp_dealloc */
-    0,                               /* tp_print */
-    0,                               /* tp_getattr */
-    0,                               /* tp_setattr */
-    0,                               /* tp_reserved */
-    0,                               /* tp_repr */
-    0,                               /* tp_as_number */
-    0,                               /* tp_as_sequence */
-    0,                               /* tp_as_mapping */
-    0,                               /* tp_hash  */
-    0,                               /* tp_call */
-    0,                               /* tp_str */
-    0,                               /* tp_getattro */
-    0,                               /* tp_setattro */
-    0,                               /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,         /* tp_flags */
-    "Chain datum type id object",           /* tp_doc */
-    0,		                         /* tp_traverse */
-    0,		                         /* tp_clear */
-    0,		                         /* tp_richcompare */
-    0,                               /* tp_weaklistoffset */
-    0,		                         /* tp_iter */
-    0,		                         /* tp_iternext */
-    0,                               /* tp_methods */
-    0,                               /* tp_members */
-    0,                               /* tp_getset */
-    0,                               /* tp_base */
-    0,                               /* tp_dict */
-    0,                               /* tp_descr_get */
-    0,                               /* tp_descr_set */
-    0,                               /* tp_dictoffset */
-    0,                               /* tp_init */
-    0,                               /* tp_alloc */
-    PyType_GenericNew,               /* tp_new */
-};
-/* -------------------------------- */
-
-typedef struct PyDapChainDatum{
-    PyObject_HEAD
-    dap_chain_datum_t *datum;
-}PyDapChainDatumObject;
-
-//void PyDapChainDatumObject_dealloc(PyDapChainDatumObject* object);
-PyObject *PyDapChainDatumObject_new(PyTypeObject *type_object, PyObject *args, PyObject *kwds);
-
-static PyTypeObject DapChainDatumObject_DapChainDatumObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.Datum",          /* tp_name */
-    sizeof(PyDapChainDatumObject),   /* tp_basicsize */
-    0,                               /* tp_itemsize */
-    0,                               /* tp_dealloc */
-    0,                               /* tp_print */
-    0,                               /* tp_getattr */
-    0,                               /* tp_setattr */
-    0,                               /* tp_reserved */
-    0,                               /* tp_repr */
-    0,                               /* tp_as_number */
-    0,                               /* tp_as_sequence */
-    0,                               /* tp_as_mapping */
-    0,                               /* tp_hash  */
-    0,                               /* tp_call */
-    0,                               /* tp_str */
-    0,                               /* tp_getattro */
-    0,                               /* tp_setattro */
-    0,                               /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,         /* tp_flags */
-    "Chain datum object",            /* tp_doc */
-    0,		                         /* tp_traverse */
-    0,		                         /* tp_clear */
-    0,		                         /* tp_richcompare */
-    0,                               /* tp_weaklistoffset */
-    0,		                         /* tp_iter */
-    0,		                         /* tp_iternext */
-    0,                               /* tp_methods */
-    0,                               /* tp_members */
-    0,                               /* tp_getset */
-    0,                               /* tp_base */
-    0,                               /* tp_dict */
-    0,                               /* tp_descr_get */
-    0,                               /* tp_descr_set */
-    0,                               /* tp_dictoffset */
-    0,                               /* tp_init */
-    0,                               /* tp_alloc */
-    PyDapChainDatumObject_new,       /* tp_new */
-};
-/* -------------------------------- */
-
-/* DAP Chain datum iter*/
-typedef struct PyDapChainDatumIter{
-    PyObject_HEAD
-    dap_chain_datum_iter_t *datum_iter;
-}PyDapChainDatumIterObject;
-
-static PyTypeObject DapChainDatumIterObject_DapChainDatumIterObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.DatumIter",          /* tp_name */
-    sizeof(PyDapChainDatumIterObject),   /* tp_basicsize */
-    0,                               /* tp_itemsize */
-    0,                               /* tp_dealloc */
-    0,                               /* tp_print */
-    0,                               /* tp_getattr */
-    0,                               /* tp_setattr */
-    0,                               /* tp_reserved */
-    0,                               /* tp_repr */
-    0,                               /* tp_as_number */
-    0,                               /* tp_as_sequence */
-    0,                               /* tp_as_mapping */
-    0,                               /* tp_hash  */
-    0,                               /* tp_call */
-    0,                               /* tp_str */
-    0,                               /* tp_getattro */
-    0,                               /* tp_setattro */
-    0,                               /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,         /* tp_flags */
-    "Chain datum iter object",           /* tp_doc */
-    0,		                         /* tp_traverse */
-    0,		                         /* tp_clear */
-    0,		                         /* tp_richcompare */
-    0,                               /* tp_weaklistoffset */
-    0,		                         /* tp_iter */
-    0,		                         /* tp_iternext */
-    0,                               /* tp_methods */
-    0,                               /* tp_members */
-    0,                               /* tp_getset */
-    0,                               /* tp_base */
-    0,                               /* tp_dict */
-    0,                               /* tp_descr_get */
-    0,                               /* tp_descr_set */
-    0,                               /* tp_dictoffset */
-    0,                               /* tp_init */
-    0,                               /* tp_alloc */
-    PyType_GenericNew,               /* tp_new */
-};
-/* -------------------------------- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //_WRAPPING_DAP_CHAIN_DATUM_
diff --git a/include/wrapping_dap_chain_datum_token.h b/include/wrapping_dap_chain_datum_token.h
deleted file mode 100644
index 727f8eaebb5d3ad377396985ed3d93641b7a2433..0000000000000000000000000000000000000000
--- a/include/wrapping_dap_chain_datum_token.h
+++ /dev/null
@@ -1,117 +0,0 @@
-#ifndef _WRAPPING_DAP_CHAIN_DATUM_TOKEN_
-#define _WRAPPING_DAP_CHAIN_DATUM_TOKEN_
-
-#include "Python.h"
-#include "dap_chain_datum_token.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* DAP chain datum token */
-
-typedef struct PyDapChainDatumToken{
-    PyObject_HEAD
-    dap_chain_datum_token_t *token;
-}PyDapChainDatumTokenObject;
-
-static PyTypeObject DapChainDatumToken_DapChainDatumTokenObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.DatumTokenObject",       /* tp_name */
-    sizeof(PyDapChainDatumTokenObject),      /* tp_basicsize */
-    0,                                       /* tp_itemsize */
-    0,                                       /* tp_dealloc */
-    0,                                       /* tp_print */
-    0,                                       /* tp_getattr */
-    0,                                       /* tp_setattr */
-    0,                                       /* tp_reserved */
-    0,                                       /* tp_repr */
-    0,                                       /* tp_as_number */
-    0,                                       /* tp_as_sequence */
-    0,                                       /* tp_as_mapping */
-    0,                                       /* tp_hash  */
-    0,                                       /* tp_call */
-    0,                                       /* tp_str */
-    0,                                       /* tp_getattro */
-    0,                                       /* tp_setattro */
-    0,                                       /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,                 /* tp_flags */
-    "Chain datum token object",              /* tp_doc */
-    0,		                                 /* tp_traverse */
-    0,		                                 /* tp_clear */
-    0,		                                 /* tp_richcompare */
-    0,                                       /* tp_weaklistoffset */
-    0,		                                 /* tp_iter */
-    0,		                                 /* tp_iternext */
-    0,                                       /* tp_methods */
-    0,                                       /* tp_members */
-    0,                                       /* tp_getset */
-    0,                                       /* tp_base */
-    0,                                       /* tp_dict */
-    0,                                       /* tp_descr_get */
-    0,                                       /* tp_descr_set */
-    0,                                       /* tp_dictoffset */
-    0,                                       /* tp_init */
-    0,                                       /* tp_alloc */
-    PyType_GenericNew,                       /* tp_new */
-};
-
-/* ------------------------------------------- */
-
-/* DAP chain datum token emission */
-
-typedef struct PyDapChainDatumTokenEmission{
-    PyObject_HEAD
-    dap_chain_datum_token_emission_t *token_emission;
-}PyDapChainDatumTokenEmissionObject;
-
-static PyTypeObject DapChainDatumTokenEmission_DapChainDatumTokenEmissionObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.DatumTokenEmission",             /* tp_name */
-    sizeof(PyDapChainDatumTokenEmissionObject),      /* tp_basicsize */
-    0,                                               /* tp_itemsize */
-    0,                                               /* tp_dealloc */
-    0,                                               /* tp_print */
-    0,                                               /* tp_getattr */
-    0,                                               /* tp_setattr */
-    0,                                               /* tp_reserved */
-    0,                                               /* tp_repr */
-    0,                                               /* tp_as_number */
-    0,                                               /* tp_as_sequence */
-    0,                                               /* tp_as_mapping */
-    0,                                               /* tp_hash  */
-    0,                                               /* tp_call */
-    0,                                               /* tp_str */
-    0,                                               /* tp_getattro */
-    0,                                               /* tp_setattro */
-    0,                                               /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,                         /* tp_flags */
-    "Chain datum token emission object",             /* tp_doc */
-    0,		                                         /* tp_traverse */
-    0,		                                         /* tp_clear */
-    0,		                                         /* tp_richcompare */
-    0,                                               /* tp_weaklistoffset */
-    0,		                                         /* tp_iter */
-    0,		                                         /* tp_iternext */
-    0,  	                                         /* tp_methods */
-    0,                                               /* tp_members */
-    0,                                               /* tp_getset */
-    0,                                               /* tp_base */
-    0,                                               /* tp_dict */
-    0,                                               /* tp_descr_get */
-    0,                                               /* tp_descr_set */
-    0,                                               /* tp_dictoffset */
-    0,                                               /* tp_init */
-    0,                                               /* tp_alloc */
-    PyType_GenericNew,                               /* tp_new */
-};
-
-/* ------------------------------------------- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //_WRAPPING_DAP_CHAIN_DATUM_TOKEN_
diff --git a/include/wrapping_dap_chain_datum_tx.h b/include/wrapping_dap_chain_datum_tx.h
deleted file mode 100644
index 62203de76935f602016be83eb17592eea206ce3b..0000000000000000000000000000000000000000
--- a/include/wrapping_dap_chain_datum_tx.h
+++ /dev/null
@@ -1,266 +0,0 @@
-#ifndef _WRAPPING_DAP_CHAIN_DATUM_TX_
-#define _WRAPPING_DAP_CHAIN_DATUM_TX_
-
-#include "Python.h"
-#include "dap_chain_datum_tx.h"
-#include "wrapping_dap_chain_common.h"
-#include "libdap_crypto_key_python.h"
-#include "dap_chain_datum_tx_out_cond.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* DAP chain tx iter type */
-typedef struct PyDapChainTxItemType{
-    PyObject_HEAD
-}PyDapChainTxItemTypeObject;
-
-PyObject *TX_ITEM_TYPE_IN_PY(void);
-PyObject *TX_ITEM_TYPE_OUT_PY(void);
-PyObject *TX_ITEM_TYPE_PKEY_PY(void);
-PyObject *TX_ITEM_TYPE_SIG_PY(void);
-PyObject *TX_ITEM_TYPE_TOKEN_PY(void);
-PyObject *TX_ITEM_TYPE_IN_COND_PY(void);
-PyObject *TX_ITEM_TYPE_OUT_COND_PY(void);
-PyObject *TX_ITEM_TYPE_RECEIPT_PY(void);
-
-static PyMethodDef PyDapChainTxItemTypeObjectMethods[] ={
-    {"TX_ITEM_TYPE_IN", (PyCFunction)TX_ITEM_TYPE_IN_PY, METH_NOARGS | METH_STATIC, ""},
-    {"TX_ITEM_TYPE_OUT", (PyCFunction)TX_ITEM_TYPE_OUT_PY, METH_NOARGS | METH_STATIC, ""},
-    {"TX_ITEM_TYPE_PKEY", (PyCFunction)TX_ITEM_TYPE_PKEY_PY, METH_NOARGS | METH_STATIC, ""},
-    {"TX_ITEM_TYPE_SIG", (PyCFunction)TX_ITEM_TYPE_SIG_PY, METH_NOARGS | METH_STATIC, ""},
-    {"TX_ITEM_TYPE_TOKEN", (PyCFunction)TX_ITEM_TYPE_TOKEN_PY, METH_NOARGS | METH_STATIC, ""},
-    {"TX_ITEM_TYPE_IN_COND", (PyCFunction)TX_ITEM_TYPE_IN_COND_PY, METH_NOARGS | METH_STATIC, ""},
-    {"TX_ITEM_TYPE_OUT_COND", (PyCFunction)TX_ITEM_TYPE_OUT_COND_PY, METH_NOARGS | METH_STATIC, ""},
-    {"TX_ITEM_TYPE_RECEIPT", (PyCFunction)TX_ITEM_TYPE_RECEIPT_PY,
-                                                            METH_NOARGS | METH_STATIC, ""},
-    {NULL, NULL, 0, NULL}
-};
-
-static PyTypeObject DapChainTxItemObject_DapChainTxItemTypeObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.TxItemType",        /* tp_name */
-    sizeof(PyDapChainTxItemTypeObject), /* tp_basicsize */
-    0,                                  /* tp_itemsize */
-    0,                                  /* tp_dealloc */
-    0,                                  /* tp_print */
-    0,                                  /* tp_getattr */
-    0,                                  /* tp_setattr */
-    0,                                  /* tp_reserved */
-    0,                                  /* tp_repr */
-    0,                                  /* tp_as_number */
-    0,                                  /* tp_as_sequence */
-    0,                                  /* tp_as_mapping */
-    0,                                  /* tp_hash  */
-    0,                                  /* tp_call */
-    0,                                  /* tp_str */
-    0,                                  /* tp_getattro */
-    0,                                  /* tp_setattro */
-    0,                                  /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,            /* tp_flags */
-    "Chain tx item type object",        /* tp_doc */
-    0,		                            /* tp_traverse */
-    0,		                            /* tp_clear */
-    0,		                            /* tp_richcompare */
-    0,                                  /* tp_weaklistoffset */
-    0,		                            /* tp_iter */
-    0,		                            /* tp_iternext */
-    PyDapChainTxItemTypeObjectMethods,  /* tp_methods */
-    0,                                  /* tp_members */
-    0,                                  /* tp_getset */
-    0,                                  /* tp_base */
-    0,                                  /* tp_dict */
-    0,                                  /* tp_descr_get */
-    0,                                  /* tp_descr_set */
-    0,                                  /* tp_dictoffset */
-    0,                                  /* tp_init */
-    0,                                  /* tp_alloc */
-    PyType_GenericNew,                  /* tp_new */
-};
-
-/* -------------------------------------- */
-
-/* DAP chain tx cond*/
-typedef struct PyDapChainTxCondType{
-    PyObject_HEAD
-    dap_chain_tx_cond_type_t *tx_cond_type_t;
-}PyDapChainTxCondTypeObject;
-
-static PyTypeObject DapChainTxType_DapChainTxCondTypeObject = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.TxCondType",       /* tp_name */
-    sizeof(PyDapChainTxCondTypeObject),/* tp_basicsize */
-    0,                               /* tp_itemsize */
-    0,                               /* tp_dealloc */
-    0,                               /* tp_print */
-    0,                               /* tp_getattr */
-    0,                               /* tp_setattr */
-    0,                               /* tp_reserved */
-    0,                               /* tp_repr */
-    0,                               /* tp_as_number */
-    0,                               /* tp_as_sequence */
-    0,                               /* tp_as_mapping */
-    0,                               /* tp_hash  */
-    0,                               /* tp_call */
-    0,                               /* tp_str */
-    0,                               /* tp_getattro */
-    0,                               /* tp_setattro */
-    0,                               /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,         /* tp_flags */
-    "Chain tx cond type object",             /* tp_doc */
-    0,		                         /* tp_traverse */
-    0,		                         /* tp_clear */
-    0,		                         /* tp_richcompare */
-    0,                               /* tp_weaklistoffset */
-    0,		                         /* tp_iter */
-    0,		                         /* tp_iternext */
-    0,                               /* tp_methods */
-    0,                               /* tp_members */
-    0,                               /* tp_getset */
-    0,                               /* tp_base */
-    0,                               /* tp_dict */
-    0,                               /* tp_descr_get */
-    0,                               /* tp_descr_set */
-    0,                               /* tp_dictoffset */
-    0,                               /* tp_init */
-    0,                               /* tp_alloc */
-    PyType_GenericNew,               /* tp_new */
-};
-
-/* -------------------------------------- */
-
-/* DAP chain datum tx */
-typedef struct PyDapChainDatumTx{
-    PyObject_HEAD
-    dap_chain_datum_tx_t *datum_tx;
-}PyDapChainDatumTxObject;
-
-PyObject *PyDapChainDatumTxObject_create(PyTypeObject *type_object, PyObject *args, PyObject *kwds);
-void PyDapChainDatumTxObject_delete(PyDapChainDatumTxObject* datumTx);
-PyObject *dap_chain_datum_tx_get_size_py(PyObject *self, PyObject *args);
-PyObject *dap_chain_datum_tx_add_item_py(PyObject *self, PyObject *args);
-PyObject *dap_chain_datum_tx_add_in_item_py(PyObject *self, PyObject *args);
-PyObject *dap_chain_datum_tx_add_out_item_py(PyObject *self, PyObject *args);
-PyObject *dap_chain_datum_tx_add_out_cond_item_py(PyObject *self, PyObject *args);
-PyObject *dap_chain_datum_tx_add_sign_item_py(PyObject *self, PyObject *args);
-PyObject *dap_chain_datum_tx_verify_sign_py(PyObject *self, PyObject *args);
-
-static dap_chain_datum_tx_t **PyListToDapChainDatumTxArray(PyObject *a_in_obj);
-static PyObject* DapChainDatumTxArrayToPyList(dap_chain_datum_tx_t** datum_txs);
-
-
-static PyMethodDef PyDapChainDatumTxObjectMethods[] ={
-    {"getSize", (PyCFunction)dap_chain_datum_tx_get_size_py, METH_VARARGS, ""},
-    {"addItem", (PyCFunction)dap_chain_datum_tx_add_item_py, METH_VARARGS | METH_STATIC, ""},
-    {"addInItem", (PyCFunction)dap_chain_datum_tx_add_in_item_py, METH_VARARGS | METH_STATIC, ""},
-    {"addOutItem", (PyCFunction)dap_chain_datum_tx_add_out_item_py, METH_VARARGS | METH_STATIC, ""},
-    {"addOutCond", (PyCFunction)dap_chain_datum_tx_add_out_cond_item_py, METH_VARARGS | METH_STATIC, ""},
-    {"addSignItem", (PyCFunction)dap_chain_datum_tx_add_sign_item_py, METH_VARARGS | METH_STATIC, ""},
-    {"verifySign", (PyCFunction)dap_chain_datum_tx_verify_sign_py, METH_VARARGS, ""},
-    {NULL, NULL, 0, NULL}
-};
-
-static PyTypeObject DapChainDatumTx_DapChainDatumTxObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.DatumTx",                      /* tp_name */
-    sizeof(PyDapChainDatumTxObject),               /* tp_basicsize */
-    0,                                             /* tp_itemsize */
-    (destructor)PyDapChainDatumTxObject_delete,    /* tp_dealloc */
-    0,                                              /* tp_print */
-    0,                                              /* tp_getattr */
-    0,                                              /* tp_setattr */
-    0,                                              /* tp_reserved */
-    0,                                              /* tp_repr */
-    0,                                              /* tp_as_number */
-    0,                                              /* tp_as_sequence */
-    0,                                              /* tp_as_mapping */
-    0,                                              /* tp_hash  */
-    0,                                              /* tp_call */
-    0,                                              /* tp_str */
-    0,                                              /* tp_getattro */
-    0,                                              /* tp_setattro */
-    0,                                              /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,                        /* tp_flags */
-    "Chain datum tx object",                        /* tp_doc */
-    0,		                                        /* tp_traverse */
-    0,		                                        /* tp_clear */
-    0,		                                        /* tp_richcompare */
-    0,                                              /* tp_weaklistoffset */
-    0,		                                        /* tp_iter */
-    0,		                                        /* tp_iternext */
-    PyDapChainDatumTxObjectMethods,                 /* tp_methods */
-    0,                                              /* tp_members */
-    0,                                              /* tp_getset */
-    0,                                              /* tp_base */
-    0,                                              /* tp_dict */
-    0,                                              /* tp_descr_get */
-    0,                                              /* tp_descr_set */
-    0,                                              /* tp_dictoffset */
-    0,                                              /* tp_init */
-    0,                                              /* tp_alloc */
-    PyDapChainDatumTxObject_create,                 /* tp_new */
-};
-
-/* -------------------------------------- */
-
-typedef struct PyDapChainTxOutCond{
-    PyObject_HEAD
-    dap_chain_tx_out_cond_t *out_cond;
-}PyDapChainTxOutCondObject;
-
-static PyTypeObject DapChainTxOutCond_DapChainTxOutCondObjectType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "CellFrame.Chain.TxOutCond",                      /* tp_name */
-    sizeof(PyDapChainTxOutCondObject),               /* tp_basicsize */
-    0,                                             /* tp_itemsize */
-    0,                                             /* tp_dealloc */
-    0,                                              /* tp_print */
-    0,                                              /* tp_getattr */
-    0,                                              /* tp_setattr */
-    0,                                              /* tp_reserved */
-    0,                                              /* tp_repr */
-    0,                                              /* tp_as_number */
-    0,                                              /* tp_as_sequence */
-    0,                                              /* tp_as_mapping */
-    0,                                              /* tp_hash  */
-    0,                                              /* tp_call */
-    0,                                              /* tp_str */
-    0,                                              /* tp_getattro */
-    0,                                              /* tp_setattro */
-    0,                                              /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT |
-        Py_TPFLAGS_BASETYPE,                        /* tp_flags */
-    "Chain tx out cond object",                        /* tp_doc */
-    0,		                                        /* tp_traverse */
-    0,		                                        /* tp_clear */
-    0,		                                        /* tp_richcompare */
-    0,                                              /* tp_weaklistoffset */
-    0,		                                        /* tp_iter */
-    0,		                                        /* tp_iternext */
-    0,                                              /* tp_methods */
-    0,                                              /* tp_members */
-    0,                                              /* tp_getset */
-    0,                                              /* tp_base */
-    0,                                              /* tp_dict */
-    0,                                              /* tp_descr_get */
-    0,                                              /* tp_descr_set */
-    0,                                              /* tp_dictoffset */
-    0,                                              /* tp_init */
-    0,                                              /* tp_alloc */
-    PyType_GenericNew,                              /* tp_new */
-};
-
-dap_chain_tx_out_cond_t **PyListToDapChainTxOutCond(PyObject *list);
-PyObject *DapChainTxOutCondObjectToPyList(dap_chain_tx_out_cond_t **out_cond);
-
-/* -------------------------------------- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //_WRAPPING_DAP_CHAIN_DATUM_TX_
diff --git a/include/wrapping_dap_chain_ledger.h b/include/wrapping_dap_chain_ledger.h
index d5eb4d34c4554304d524f8b1bb756030724ad301..160ea180a80c9a4d4a5a45db229f127f61b31e57 100644
--- a/include/wrapping_dap_chain_ledger.h
+++ b/include/wrapping_dap_chain_ledger.h
@@ -3,9 +3,10 @@
 
 #include "Python.h"
 #include "dap_chain_ledger.h"
-#include "wrapping_dap_chain_common_objects.h"
+#include "wrapping_dap_chain_common.h"
 #include "wrapping_dap_chain_datum_tx.h"
 #include "wrapping_dap_chain_datum_token.h"
+#include "wrapping_dap_hash.h"
 #include "libdap-python.h"
 
 
diff --git a/libdap b/libdap
index 1c0614797a3a2a2f4c179630025600e177637a65..aa1d2e2b2aecd5e7686172fd06fe578a03077bbd 160000
--- a/libdap
+++ b/libdap
@@ -1 +1 @@
-Subproject commit 1c0614797a3a2a2f4c179630025600e177637a65
+Subproject commit aa1d2e2b2aecd5e7686172fd06fe578a03077bbd
diff --git a/libdap-chain b/libdap-chain
index f7e22487b7c01431161bc527269e76e16e213cfd..777394aa9c175db4e6245c95c990a6f2c5717a58 160000
--- a/libdap-chain
+++ b/libdap-chain
@@ -1 +1 @@
-Subproject commit f7e22487b7c01431161bc527269e76e16e213cfd
+Subproject commit 777394aa9c175db4e6245c95c990a6f2c5717a58
diff --git a/libdap-chain-common b/libdap-chain-common
new file mode 160000
index 0000000000000000000000000000000000000000..5af3788fc532f217678165ff7f625a579083f0f1
--- /dev/null
+++ b/libdap-chain-common
@@ -0,0 +1 @@
+Subproject commit 5af3788fc532f217678165ff7f625a579083f0f1
diff --git a/libdap-chain-common-python b/libdap-chain-common-python
new file mode 160000
index 0000000000000000000000000000000000000000..3ba70a530d9aa09ff13aa62d97b142ccccf1070d
--- /dev/null
+++ b/libdap-chain-common-python
@@ -0,0 +1 @@
+Subproject commit 3ba70a530d9aa09ff13aa62d97b142ccccf1070d
diff --git a/libdap-chain-crypto b/libdap-chain-crypto
index f8dfd888432234c0314057f5551a578dd770003c..1248013aff1bbde72e92d20e9c13225ab11b2b16 160000
--- a/libdap-chain-crypto
+++ b/libdap-chain-crypto
@@ -1 +1 @@
-Subproject commit f8dfd888432234c0314057f5551a578dd770003c
+Subproject commit 1248013aff1bbde72e92d20e9c13225ab11b2b16
diff --git a/libdap-chain-gdb b/libdap-chain-gdb
index e9d57285c3d2383e13e1d949935628cb56c694cc..25f9668706f8e728351db9295e6a1fe0111d32bc 160000
--- a/libdap-chain-gdb
+++ b/libdap-chain-gdb
@@ -1 +1 @@
-Subproject commit e9d57285c3d2383e13e1d949935628cb56c694cc
+Subproject commit 25f9668706f8e728351db9295e6a1fe0111d32bc
diff --git a/libdap-chain-global-db b/libdap-chain-global-db
index 8c6bbf4458bd10614bf48bb2da7e84b4f80f0d33..6b1f0c34cf0fd9c2e20441b4c0ce621c8febf1b8 160000
--- a/libdap-chain-global-db
+++ b/libdap-chain-global-db
@@ -1 +1 @@
-Subproject commit 8c6bbf4458bd10614bf48bb2da7e84b4f80f0d33
+Subproject commit 6b1f0c34cf0fd9c2e20441b4c0ce621c8febf1b8
diff --git a/libdap-chain-mempool b/libdap-chain-mempool
index 4bbdcf60e10de8462820e45d7cc3715dca4c2139..a063222c80bc25cf70fdb3b6391f202bb2c08c65 160000
--- a/libdap-chain-mempool
+++ b/libdap-chain-mempool
@@ -1 +1 @@
-Subproject commit 4bbdcf60e10de8462820e45d7cc3715dca4c2139
+Subproject commit a063222c80bc25cf70fdb3b6391f202bb2c08c65
diff --git a/libdap-chain-net b/libdap-chain-net
index 10e82c5393eee63eff349b4f4d2ec932e66c57bf..c8e2ce5e118a9f869cee2b6848e837d38bcf5e03 160000
--- a/libdap-chain-net
+++ b/libdap-chain-net
@@ -1 +1 @@
-Subproject commit 10e82c5393eee63eff349b4f4d2ec932e66c57bf
+Subproject commit c8e2ce5e118a9f869cee2b6848e837d38bcf5e03
diff --git a/libdap-chain-net-srv b/libdap-chain-net-srv
index 5edea70af6a5ede0c759e9d83a5741376f4da9fb..72da709759280291f16399cfaf4198eb819ebb9f 160000
--- a/libdap-chain-net-srv
+++ b/libdap-chain-net-srv
@@ -1 +1 @@
-Subproject commit 5edea70af6a5ede0c759e9d83a5741376f4da9fb
+Subproject commit 72da709759280291f16399cfaf4198eb819ebb9f
diff --git a/libdap-chain-net-srv-vpn b/libdap-chain-net-srv-vpn
index 5d22d6242694b003694ea5130be2383761880551..b1d19f4bf3452077fae5e3e8c8bc8e48b1e4cc16 160000
--- a/libdap-chain-net-srv-vpn
+++ b/libdap-chain-net-srv-vpn
@@ -1 +1 @@
-Subproject commit 5d22d6242694b003694ea5130be2383761880551
+Subproject commit b1d19f4bf3452077fae5e3e8c8bc8e48b1e4cc16
diff --git a/libdap-chain-wallet b/libdap-chain-wallet
index 5273ba5ba0a15dd94e680f9d961ab150f3764848..1d23760cc25190ff114eac4cab212459360936f8 160000
--- a/libdap-chain-wallet
+++ b/libdap-chain-wallet
@@ -1 +1 @@
-Subproject commit 5273ba5ba0a15dd94e680f9d961ab150f3764848
+Subproject commit 1d23760cc25190ff114eac4cab212459360936f8
diff --git a/libdap-client b/libdap-client
index d3f5458f352294547b1ac68404d5ccdc8dea28ba..802517a9cce864cf5b55eaf1e2c70bb97f4dbec7 160000
--- a/libdap-client
+++ b/libdap-client
@@ -1 +1 @@
-Subproject commit d3f5458f352294547b1ac68404d5ccdc8dea28ba
+Subproject commit 802517a9cce864cf5b55eaf1e2c70bb97f4dbec7
diff --git a/libdap-crypto b/libdap-crypto
index d9337dda7db1b3430d17914b4e290b9a200045a2..16a16e71b9cfae4fd8df530ed8cd6146010ae7e0 160000
--- a/libdap-crypto
+++ b/libdap-crypto
@@ -1 +1 @@
-Subproject commit d9337dda7db1b3430d17914b4e290b9a200045a2
+Subproject commit 16a16e71b9cfae4fd8df530ed8cd6146010ae7e0
diff --git a/libdap-crypto-python b/libdap-crypto-python
index e0fef50bbe630c2835020fbebf3bcdfe064255a8..96563be43c50445e32484bd35922352dccb5e6cb 160000
--- a/libdap-crypto-python
+++ b/libdap-crypto-python
@@ -1 +1 @@
-Subproject commit e0fef50bbe630c2835020fbebf3bcdfe064255a8
+Subproject commit 96563be43c50445e32484bd35922352dccb5e6cb
diff --git a/libdap-server b/libdap-server
index e3f07ae78aaecfada9f44abdd48a4ebbce9e2184..bc2eeb22af9852cce12079b755b6afa277d5be4e 160000
--- a/libdap-server
+++ b/libdap-server
@@ -1 +1 @@
-Subproject commit e3f07ae78aaecfada9f44abdd48a4ebbce9e2184
+Subproject commit bc2eeb22af9852cce12079b755b6afa277d5be4e
diff --git a/libdap-server-core b/libdap-server-core
index 73a86ef8202ee67a05098d186aac2deacb207f63..8ed6c9dee385a9178c4b07b097e62e62ecfb6923 160000
--- a/libdap-server-core
+++ b/libdap-server-core
@@ -1 +1 @@
-Subproject commit 73a86ef8202ee67a05098d186aac2deacb207f63
+Subproject commit 8ed6c9dee385a9178c4b07b097e62e62ecfb6923
diff --git a/libdap-server-http-db b/libdap-server-http-db
index f3f0b0ed919d37368e86210940ebb9de686879a1..8d974654dc02860dae64b313aadc1c062c5c4dc3 160000
--- a/libdap-server-http-db
+++ b/libdap-server-http-db
@@ -1 +1 @@
-Subproject commit f3f0b0ed919d37368e86210940ebb9de686879a1
+Subproject commit 8d974654dc02860dae64b313aadc1c062c5c4dc3
diff --git a/libdap-server-http-db-auth b/libdap-server-http-db-auth
index cf0d3043d2003690b0f8d92aab8f193671a4d6db..c03c689e1cf6b7e68b0033c0bc1f745c7c64a46d 160000
--- a/libdap-server-http-db-auth
+++ b/libdap-server-http-db-auth
@@ -1 +1 @@
-Subproject commit cf0d3043d2003690b0f8d92aab8f193671a4d6db
+Subproject commit c03c689e1cf6b7e68b0033c0bc1f745c7c64a46d
diff --git a/libdap-server-udp b/libdap-server-udp
index a14daa6c39aed9bba32684872d03afc7778db61e..7500d54e139a92586b1488edffcb12f4f1c824ec 160000
--- a/libdap-server-udp
+++ b/libdap-server-udp
@@ -1 +1 @@
-Subproject commit a14daa6c39aed9bba32684872d03afc7778db61e
+Subproject commit 7500d54e139a92586b1488edffcb12f4f1c824ec
diff --git a/libdap-stream b/libdap-stream
index 5fd18ccdb08cf8f35b0ab7eed857387433bddbbb..4781932c88e82e1fe38f8859ef56a8367f580d4b 160000
--- a/libdap-stream
+++ b/libdap-stream
@@ -1 +1 @@
-Subproject commit 5fd18ccdb08cf8f35b0ab7eed857387433bddbbb
+Subproject commit 4781932c88e82e1fe38f8859ef56a8367f580d4b
diff --git a/libdap-stream-ch b/libdap-stream-ch
index daeb35e4680f659d41ade4da7514138e56278685..3bdf48f5401b54b582c2d28b71c9e596bcc6c090 160000
--- a/libdap-stream-ch
+++ b/libdap-stream-ch
@@ -1 +1 @@
-Subproject commit daeb35e4680f659d41ade4da7514138e56278685
+Subproject commit 3bdf48f5401b54b582c2d28b71c9e596bcc6c090
diff --git a/libdap-stream-ch-chain b/libdap-stream-ch-chain
index d614be3773d73516d7f56f3f439232a3a09539d7..785c736a3fafe03cd5c03bddb3bb20450a7e3c6f 160000
--- a/libdap-stream-ch-chain
+++ b/libdap-stream-ch-chain
@@ -1 +1 @@
-Subproject commit d614be3773d73516d7f56f3f439232a3a09539d7
+Subproject commit 785c736a3fafe03cd5c03bddb3bb20450a7e3c6f
diff --git a/libdap-stream-ch-chain-net b/libdap-stream-ch-chain-net
index 6875d05d0d3c3da2c9562b4840f48a5267e865ca..3c768e4b51cd4dc87893769ee0693992138be675 160000
--- a/libdap-stream-ch-chain-net
+++ b/libdap-stream-ch-chain-net
@@ -1 +1 @@
-Subproject commit 6875d05d0d3c3da2c9562b4840f48a5267e865ca
+Subproject commit 3c768e4b51cd4dc87893769ee0693992138be675
diff --git a/src/libdap-chain-python.c b/src/libdap-chain-python.c
index 6d04a59f6fd6f20192c01651a43cd37338229d18..3e840db78859c41bf08f6438042d9802a44817d5 100644
--- a/src/libdap-chain-python.c
+++ b/src/libdap-chain-python.c
@@ -15,7 +15,7 @@ PyObject *dap_chain_find_by_id_py(PyObject *self, PyObject *args){
     if (!PyArg_ParseTuple(args, "O|O", &obj_net_id, &obj_chain_id))
         return NULL;
     PyObject *new_obj = _PyObject_New(&dapChainObject_dapChainType);
-    ((PyDapChainObject*)new_obj)->chain_t = dap_chain_find_by_id(((PyDapChainNetIdObject*)obj_net_id)->net_id, ((PyDapChainIdObject*)obj_chain_id)->id);
+    ((PyDapChainObject*)new_obj)->chain_t = dap_chain_find_by_id(((PyDapChainNetIdObject*)obj_net_id)->net_id, ((PyDapChainIDObject*)obj_chain_id)->chain_id);
     return Py_BuildValue("O", &new_obj);
 }
 
diff --git a/src/wrapping_dap_chain_common.c b/src/wrapping_dap_chain_common.c
deleted file mode 100644
index dfbfa9c862575554f9e1a8e1dde31d44e3119fab..0000000000000000000000000000000000000000
--- a/src/wrapping_dap_chain_common.c
+++ /dev/null
@@ -1,56 +0,0 @@
-#include "wrapping_dap_chain_common.h"
-
-PyObject *dap_chain_hash_slow_to_str_py(PyObject *self, PyObject *args){
-    PyObject *hashSlow;
-    char *str;
-    size_t strMax;
-    if (!PyArg_ParseTuple(args, "O|s|n", &hashSlow, &str, &strMax))
-        return NULL;
-    size_t result = dap_chain_hash_slow_to_str(((PyDapChainHashSlowObject*)hashSlow)->hash_slow, str, strMax);
-    return PyLong_FromSize_t(result);
-}
-
-PyObject *dap_chain_str_to_hash_fast_py(PyObject *self, PyObject *args){
-    const char *hashStr;
-    PyObject *hashFast;
-    if (!PyArg_ParseTuple(args, "s|O", &hashStr, &hashFast))
-        return NULL;
-    int result = dap_chain_str_to_hash_fast(hashStr, ((PyDapChainHashFastObject*)hashFast)->hash_fast);
-    return PyLong_FromLong(result);
-}
-
-PyObject *dap_chain_addr_to_str_py(PyObject *self, PyObject *args){
-    PyObject *addr;
-    if (!PyArg_ParseTuple(args, "O", &addr))
-        return NULL;
-    char *result = dap_chain_addr_to_str(((PyDapChainAddrObject*)addr)->addr);
-    return Py_BuildValue("s", result);
-}
-
-PyObject *dap_chain_addr_from_str_py(PyObject *self, PyObject *args){
-    const char *str;
-    if (!PyArg_ParseTuple(args, "s", &str))
-        return NULL;
-    PyObject *addrObject = _PyObject_New(&DapChainAddrObject_DapChainAddrObjectType);
-    ((PyDapChainAddrObject*)addrObject)->addr = dap_chain_addr_from_str(str);
-    return Py_BuildValue("O", addrObject);
-}
-
-PyObject *dap_chain_addr_fill_py(PyObject *self, PyObject *args){
-    PyObject *addr;
-    PyObject *key;
-    PyObject *net_id;
-    if (!PyArg_ParseTuple(args, "O|O|O", &addr, &key, &net_id))
-        return NULL;
-    dap_chain_addr_fill(((PyDapChainAddrObject*)addr)->addr, ((PyCryptoKeyObject*)key)->key,
-                        &(((PyDapChainNetIdObject*)net_id)->net_id));
-    return PyLong_FromLong(0);
-}
-
-PyObject *dap_chain_addr_check_sum_py(PyObject *self, PyObject *args){
-    PyObject *addrObject;
-    if (!PyArg_ParseTuple(args, "O", &addrObject))
-        return NULL;
-    int result = dap_chain_addr_check_sum(((PyDapChainAddrObject*)addrObject)->addr);
-    return PyLong_FromLong(result);
-}
diff --git a/src/wrapping_dap_chain_datum.c b/src/wrapping_dap_chain_datum.c
deleted file mode 100644
index 05fcacf1e1eaf17cfe99dc7db002eb8d8ae74e46..0000000000000000000000000000000000000000
--- a/src/wrapping_dap_chain_datum.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "wrapping_dap_chain_datum.h"
-
-//void PyDapChainDatumObject_dealloc(PyDapChainDatumObject* object){
-//}
-
-PyObject *PyDapChainDatumObject_new(PyTypeObject *type_object, PyObject *args, PyObject *kwds){
-    uint16_t type_id;
-    PyBytesObject *bytes;
-    size_t data_size;
-    if (!PyArg_ParseTuple(args, "H|S|n", &type_id, &bytes, &data_size))
-        return NULL;
-    PyDapChainDatumObject *obj = (PyDapChainDatumObject*)PyType_GenericNew(type_object, args, kwds);
-    void* bytes_v = (void *)PyBytes_AsString((PyObject*)bytes);
-    obj->datum = dap_chain_datum_create(type_id, bytes_v, data_size);
-    return (PyObject *)obj;
-}
diff --git a/src/wrapping_dap_chain_datum_tx.c b/src/wrapping_dap_chain_datum_tx.c
deleted file mode 100644
index 8a81df217a4ab0721f4e8762cf9e2223071db4ed..0000000000000000000000000000000000000000
--- a/src/wrapping_dap_chain_datum_tx.c
+++ /dev/null
@@ -1,172 +0,0 @@
-#include "wrapping_dap_chain_datum_tx.h"
-
-/* DAP chain tx iter type */
-
-PyObject *TX_ITEM_TYPE_IN_PY(void){
-    return PyLong_FromLong(TX_ITEM_TYPE_IN);
-}
-PyObject *TX_ITEM_TYPE_OUT_PY(void){
-        return PyLong_FromLong(TX_ITEM_TYPE_OUT);
-}
-PyObject *TX_ITEM_TYPE_PKEY_PY(void){
-        return PyLong_FromLong(TX_ITEM_TYPE_PKEY);
-}
-PyObject *TX_ITEM_TYPE_SIG_PY(void){
-        return PyLong_FromLong(TX_ITEM_TYPE_SIG);
-}
-PyObject *TX_ITEM_TYPE_TOKEN_PY(void){
-        return PyLong_FromLong(TX_ITEM_TYPE_TOKEN);
-}
-PyObject *TX_ITEM_TYPE_IN_COND_PY(void){
-        return PyLong_FromLong(TX_ITEM_TYPE_IN_COND);
-}
-PyObject *TX_ITEM_TYPE_OUT_COND_PY(void){
-        return PyLong_FromLong(TX_ITEM_TYPE_OUT_COND);
-}
-PyObject *TX_ITEM_TYPE_RECEIPT_PY(void){
-        return PyLong_FromLong(TX_ITEM_TYPE_RECEIPT);
-}
-
-/* -------------------------------------- */
-
-/* DAP chain datum tx */
-PyObject *PyDapChainDatumTxObject_create(PyTypeObject *type_object, PyObject *args, PyObject *kwds){
-    PyDapChainDatumTxObject *obj = (PyDapChainDatumTxObject*)PyType_GenericNew(type_object, args, kwds);
-    obj->datum_tx = dap_chain_datum_tx_create();
-    return (PyObject *)obj;
-}
-void PyDapChainDatumTxObject_delete(PyDapChainDatumTxObject* datumTx){
-    dap_chain_datum_tx_delete(datumTx->datum_tx);
-    Py_TYPE(datumTx)->tp_free((PyObject*)datumTx);
-}
-
-PyObject *dap_chain_datum_tx_get_size_py(PyObject *self, PyObject *args){
-    size_t size = dap_chain_datum_tx_get_size(((PyDapChainDatumTxObject*)self)->datum_tx);
-    return PyLong_FromSize_t(size);
-}
-PyObject *dap_chain_datum_tx_add_item_py(PyObject *self, PyObject *args){
-    PyObject *in_obj;
-    u_int8_t *a_item;
-    if (!PyArg_ParseTuple(args, "O|b", &in_obj, &a_item))
-        return NULL;
-    dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(in_obj);
-    int res = dap_chain_datum_tx_add_item(txs, a_item);
-    if (res == -1){
-        return NULL;
-    } else {
-        PyObject *out = DapChainDatumTxArrayToPyList(txs);
-        return Py_BuildValue("O", out);
-    }
-}
-PyObject *dap_chain_datum_tx_add_in_item_py(PyObject *self, PyObject *args){
-    PyObject *in_obj_datum_txs;
-    PyObject *in_obj_hash_fast;
-    uint32_t in_tx_out_pref_idx;
-    if (!PyArg_ParseTuple(args, "O|O|I", &in_obj_datum_txs, &in_obj_hash_fast, &in_tx_out_pref_idx))
-        return NULL;
-    dap_chain_datum_tx_t **a_txs = PyListToDapChainDatumTxArray(in_obj_datum_txs);
-    int res = dap_chain_datum_tx_add_in_item(a_txs, ((PyDapChainHashFastObject*)in_obj_hash_fast)->hash_fast,
-                                             in_tx_out_pref_idx);
-    if (res == -1){
-        return NULL;
-    } else {
-        PyObject *out = DapChainDatumTxArrayToPyList(a_txs);
-        return Py_BuildValue("O", out);
-    }
-}
-PyObject *dap_chain_datum_tx_add_out_item_py(PyObject *self, PyObject *args){
-    PyObject *in_obj_datum_txs;
-    PyObject *in_addr;
-    uint64_t value;
-    if (!PyArg_ParseTuple(args, "O|O|k", &in_obj_datum_txs, &in_addr, value))
-        return NULL;
-    dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(in_obj_datum_txs);
-    int res = dap_chain_datum_tx_add_out_item(txs, ((PyDapChainAddrObject*)in_addr)->addr, value);
-    if (res == -1){
-        return NULL;
-    } else {
-        PyObject *out = DapChainDatumTxArrayToPyList(txs);
-        return Py_BuildValue("O", out);
-    }
-}
-PyObject *dap_chain_datum_tx_add_out_cond_item_py(PyObject *self, PyObject *args){
-    PyObject *obj_txs;
-    PyObject *obj_key;
-    PyObject *obj_addr;
-    uint64_t value;
-    PyBytesObject *bytes_cond;
-    size_t cond_size;
-    if (!PyArg_ParseTuple(args, "O|O|O|k|S|n", &obj_txs, &obj_key, &obj_addr, &value, &bytes_cond, &cond_size))
-        return NULL;
-    dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(obj_txs);
-    void *cond = PyBytes_AsString((PyObject *)bytes_cond);
-
-    int res = dap_chain_datum_tx_add_out_cond_item(txs, ((PyCryptoKeyObject*)obj_key)->key,
-                                                   ((PyDapChainAddrObject*)obj_addr)->addr, value, cond, cond_size);
-    if (res == -1){
-        return NULL;
-    } else {
-        PyObject *out = DapChainDatumTxArrayToPyList(txs);
-        return Py_BuildValue("O", out);
-    }
-}
-PyObject *dap_chain_datum_tx_add_sign_item_py(PyObject *self, PyObject *args){
-    PyObject *obj_txs;
-    PyObject *obj_key;
-    if (!PyArg_ParseTuple(args, "O|O", &obj_txs, &obj_key))
-        return NULL;
-    dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(obj_txs);
-    int res = dap_chain_datum_tx_add_sign_item(txs, ((PyCryptoKeyObject*)obj_key)->key);
-    if (res == -1){
-        return NULL;
-    } else {
-        PyObject *out = DapChainDatumTxArrayToPyList(txs);
-        return Py_BuildValue("O", out);
-    }
-}
-PyObject *dap_chain_datum_tx_verify_sign_py(PyObject *self, PyObject *args){
-    int res = dap_chain_datum_tx_verify_sign(((PyDapChainDatumTxObject*)self)->datum_tx);
-    return PyLong_FromLong(res);
-}
-
-static dap_chain_datum_tx_t **PyListToDapChainDatumTxArray(PyObject *a_in_obj){
-    Py_ssize_t size = PyList_Size(a_in_obj);
-    dap_chain_datum_tx_t **txs = calloc(sizeof(dap_chain_datum_tx_t), (size_t)size);
-    for (Py_ssize_t i = 0; i < size;i++){
-        txs[i] = ((PyDapChainDatumTxObject*)PyList_GetItem(a_in_obj, i))->datum_tx;
-    }
-    return txs;
-}
-
-static PyObject* DapChainDatumTxArrayToPyList(dap_chain_datum_tx_t** datum_txs){
-    size_t len = sizeof(datum_txs) / sizeof(datum_txs[0]);
-    PyObject* list = PyList_New((Py_ssize_t)len);
-    for (size_t i=0; i < len; i++){
-        PyObject *obj = _PyObject_New(&DapChainDatumTx_DapChainDatumTxObjectType);
-        ((PyDapChainDatumTxObject*)obj)->datum_tx = datum_txs[i];
-        PyList_Append(list, obj);
-    }
-    return list;
-}
-
-dap_chain_tx_out_cond_t **PyListToDapChainTxOutCond(PyObject *list){
-    Py_ssize_t size = PyList_Size(list);
-    dap_chain_tx_out_cond_t **out_conds = calloc(sizeof(dap_chain_tx_out_cond_t), (size_t)size);
-    for (Py_ssize_t i=0; i < size; i++){
-        out_conds[i] = ((PyDapChainTxOutCondObject*)PyList_GetItem(list, i))->out_cond;
-    }
-    return out_conds;
-}
-
-PyObject *DapChainTxOutCondObjectToPyList(dap_chain_tx_out_cond_t **out_cond){
-    size_t len = sizeof(out_cond) / sizeof(out_cond[0]);
-    PyObject *list = PyList_New((Py_ssize_t)len);
-    for (size_t i=0; i< len;i++ ){
-        PyObject *obj = _PyObject_New(&DapChainTxOutCond_DapChainTxOutCondObjectType);
-        ((PyDapChainTxOutCondObject*)obj)->out_cond = out_cond[i];
-        PyList_Append(list, obj);
-    }
-    return list;
-}
-
-/* -------------------------------------- */
diff --git a/src/wrapping_dap_chain_ledger.c b/src/wrapping_dap_chain_ledger.c
index d4cbc2dc0021fd206dc8c48f07b6769d248e7ddd..befafc134094f8beefe04d56b35e8b2a050842eb 100644
--- a/src/wrapping_dap_chain_ledger.c
+++ b/src/wrapping_dap_chain_ledger.c
@@ -18,15 +18,15 @@ PyObject *dap_chain_ledger_set_local_cell_id_py(PyObject *self, PyObject *args){
     if (!PyArg_ParseTuple(args, "O", &obj_local_cell_id))
         return NULL;
     dap_chain_ledger_set_local_cell_id(((PyDapChainLedgerObject*)self)->ledger,
-                                       ((PyDapChainCellIdObject*)obj_local_cell_id)->id);
+                                       *(((PyDapChainCellIDObject*)obj_local_cell_id)->cell_id));
     return  PyLong_FromLong(0);
 }
 PyObject *dap_chain_node_datum_tx_calc_hash_py(PyObject *self, PyObject *args){
     PyObject *obj_tx;
     if (!PyArg_ParseTuple(args, "O", &obj_tx))
         return NULL;
-    PyObject *obj_h_fast = _PyObject_New(&DapChainHashFastObject_DapChainHashFastObjectType);
-    ((PyDapChainHashFastObject*)obj_h_fast)->hash_fast = dap_chain_node_datum_tx_calc_hash(((PyDapChainDatumTxObject*)obj_tx)->datum_tx);
+    PyObject *obj_h_fast = _PyObject_New(&DapHashFastObject_DapHashFastObjectType);
+    ((PyDapHashFastObject*)obj_h_fast)->hash_fast = dap_chain_node_datum_tx_calc_hash(((PyDapChainDatumTxObject*)obj_tx)->datum_tx);
     return  Py_BuildValue("O", obj_h_fast);
 
 }
@@ -62,7 +62,7 @@ PyObject *dap_chain_ledger_token_emission_find_py(PyObject *self, PyObject *args
         return NULL;
     PyObject *token_emission = _PyObject_New(&DapChainDatumTokenEmission_DapChainDatumTokenEmissionObjectType);
     ((PyDapChainDatumTokenEmissionObject*)token_emission)->token_emission = dap_chain_ledger_token_emission_find(
-                ((PyDapChainLedgerObject*)self)->ledger, token_ticker, ((PyDapChainHashFastObject*)h_fast)->hash_fast);
+                ((PyDapChainLedgerObject*)self)->ledger, token_ticker, ((PyDapHashFastObject*)h_fast)->hash_fast);
     return Py_BuildValue("O", &token_emission);
 }
 PyObject *dap_chain_ledger_tx_get_token_ticker_by_hash_py(PyObject *self, PyObject *args){
@@ -142,7 +142,7 @@ PyObject *dap_chain_ledger_tx_remove_py(PyObject *self, PyObject *args){
     PyObject *obj_h_fast;
     if (!PyArg_ParseTuple(args, "O", &obj_h_fast))
         return NULL;
-    int res = dap_chain_ledger_tx_remove(((PyDapChainLedgerObject*)self)->ledger, ((PyDapChainHashFastObject*)obj_h_fast)->hash_fast);
+    int res = dap_chain_ledger_tx_remove(((PyDapChainLedgerObject*)self)->ledger, ((PyDapHashFastObject*)obj_h_fast)->hash_fast);
     return PyLong_FromLong(res);
 }
 PyObject *dap_chain_ledger_purge_py(PyObject *self, PyObject *args){
@@ -165,7 +165,7 @@ PyObject *dap_chain_ledger_tx_hash_is_used_out_item_py(PyObject *self, PyObject
     int idx_out;
     if (!PyArg_ParseTuple(args, "O|i", &obj_h_fast, &idx_out))
             return NULL;
-    bool res = dap_chain_ledger_tx_hash_is_used_out_item(((PyDapChainLedgerObject*)self)->ledger, ((PyDapChainHashFastObject*)obj_h_fast)->hash_fast, idx_out);
+    bool res = dap_chain_ledger_tx_hash_is_used_out_item(((PyDapChainLedgerObject*)self)->ledger, ((PyDapHashFastObject*)obj_h_fast)->hash_fast, idx_out);
     if (res)
         return Py_BuildValue("O", Py_True);
     else
@@ -192,7 +192,7 @@ PyObject *dap_chain_ledger_tx_find_by_hash_py(PyObject *self, PyObject *args){
     if (!PyArg_ParseTuple(args, "O", &h_fast))
         return NULL;
     PyObject *res = _PyObject_New(&DapChainDatumTx_DapChainDatumTxObjectType);
-    ((PyDapChainDatumTxObject*)res)->datum_tx = dap_chain_ledger_tx_find_by_hash(((PyDapChainLedgerObject*)self)->ledger, ((PyDapChainHashFastObject*)h_fast)->hash_fast);
+    ((PyDapChainDatumTxObject*)res)->datum_tx = dap_chain_ledger_tx_find_by_hash(((PyDapChainLedgerObject*)self)->ledger, ((PyDapHashFastObject*)h_fast)->hash_fast);
     return Py_BuildValue("O", res);
 }
 PyObject *dap_chain_ledger_tx_find_by_addr_py(PyObject *self, PyObject *args){
@@ -202,7 +202,7 @@ PyObject *dap_chain_ledger_tx_find_by_addr_py(PyObject *self, PyObject *args){
     if (!PyArg_ParseTuple(args, "s|O|O", &token, &addr, &first_hash))
         return NULL;
     PyObject *res = _PyObject_New(&DapChainDatumTx_DapChainDatumTxObjectType);
-    ((PyDapChainDatumTxObject*)res)->datum_tx = dap_chain_ledger_tx_find_by_addr(((PyDapChainLedgerObject*)self)->ledger, token, ((PyDapChainAddrObject*)addr)->addr, ((PyDapChainHashFastObject*)first_hash)->hash_fast);
+    ((PyDapChainDatumTxObject*)res)->datum_tx = dap_chain_ledger_tx_find_by_addr(((PyDapChainLedgerObject*)self)->ledger, token, ((PyDapChainAddrObject*)addr)->addr, ((PyDapHashFastObject*)first_hash)->hash_fast);
     return Py_BuildValue("O", res);
 }
 PyObject *dap_chain_ledger_tx_find_by_pkey_py(PyObject *self, PyObject *args){
@@ -212,7 +212,7 @@ PyObject *dap_chain_ledger_tx_find_by_pkey_py(PyObject *self, PyObject *args){
     if (!PyArg_ParseTuple(args, "s|n|O", &p_key, &p_key_size, &obj_first_hash))
         return NULL;
     PyObject *res = _PyObject_New(&DapChainDatumTx_DapChainDatumTxObjectType);
-    ((PyDapChainDatumTxObject*)res)->datum_tx = dap_chain_ledger_tx_find_by_pkey(((PyDapChainLedgerObject*)self)->ledger, p_key, p_key_size, ((PyDapChainHashFastObject*)obj_first_hash)->hash_fast);
+    ((PyDapChainDatumTxObject*)res)->datum_tx = dap_chain_ledger_tx_find_by_pkey(((PyDapChainLedgerObject*)self)->ledger, p_key, p_key_size, ((PyDapHashFastObject*)obj_first_hash)->hash_fast);
     return Py_BuildValue("O", res);
 }
 PyObject *dap_chain_ledger_tx_cache_find_out_cond_py(PyObject *self, PyObject *args){
@@ -221,7 +221,7 @@ PyObject *dap_chain_ledger_tx_cache_find_out_cond_py(PyObject *self, PyObject *a
     if (!PyArg_ParseTuple(args, "O|O", &obj_addr, &obj_first_hash))
         return NULL;
     PyObject *res = _PyObject_New(&DapChainDatumTx_DapChainDatumTxObjectType);
-    ((PyDapChainDatumTxObject*)res)->datum_tx = dap_chain_ledger_tx_cache_find_out_cond(((PyDapChainLedgerObject*)self)->ledger, ((PyDapChainAddrObject*)obj_addr)->addr, ((PyDapChainHashFastObject*)obj_first_hash)->hash_fast);
+    ((PyDapChainDatumTxObject*)res)->datum_tx = dap_chain_ledger_tx_cache_find_out_cond(((PyDapChainLedgerObject*)self)->ledger, ((PyDapChainAddrObject*)obj_addr)->addr, ((PyDapHashFastObject*)obj_first_hash)->hash_fast);
     return Py_BuildValue("O", res);
 }
 PyObject *dap_chain_ledger_tx_cache_get_out_cond_value_py(PyObject *self, PyObject *args){