diff --git a/include/python-cellframe.h b/include/python-cellframe.h
index df1b7ca7a29a215a7508836d45ddf5ff8eb84c73..3ea970a93f58e7daed2dcae2a3f9cbf8d5af631e 100644
--- a/include/python-cellframe.h
+++ b/include/python-cellframe.h
@@ -5,6 +5,18 @@
 #include "libdap-server-core-python.h"
 #include "libdap_crypto_key_type_python.h"
 #include "libdap_crypto_data_type.h"
+// === CHAIN ==
+#include "libdap-chain-python.h"
+#include "libdap_chain_type_python.h"
+#include "libdap_chain_atom_iter_python.h"
+#include "wrapping_dap_chain_cell.h"
+#include "wrapping_dap_chain_common.h"
+#include "wrapping_dap_chain_cs.h"
+#include "wrapping_dap_chain_datum.h"
+#include "wrapping_dap_chain_datum_token.h"
+#include "wrapping_dap_chain_datum_tx.h"
+#include "wrapping_dap_chain_ledger.h"
+// ============
 #include "dap_common.h"
 
 
@@ -16,6 +28,7 @@ extern "C" {
 #define LOG_TAG "python-cellframe"
 
 static bool init_crypto;
+static bool init_chain;
 
 static PyObject* CellFrame_error;
 
diff --git a/src/python-cellframe.c b/src/python-cellframe.c
index 1fd7abf735c70f5c883add35f5ee775ecdf9fbf9..f43cafeca3f30052e8d0e0463e419617986598ac 100644
--- a/src/python-cellframe.c
+++ b/src/python-cellframe.c
@@ -95,6 +95,13 @@ static PyObject *python_cellframe_init(PyObject *self, PyObject *args){
                 return NULL;
             }
         }
+        if (strcmp(c_value, "Chain") == 0){
+            if(init_chain_py() != 0){
+                PyErr_SetString(CellFrame_error, "Failed to initialize Chain. "
+                                                 "Fields thread_cnt and conn are not numerical or absent.");
+                return NULL;
+            }
+        }
     }
     return PyLong_FromLong(0);
 }
@@ -105,7 +112,26 @@ PyMODINIT_FUNC PyInit_CellFrame(void){
             PyType_Ready(&ServerCore_ServerCoreType) < 0 || PyType_Ready(&dapEvents_dapEventsType) < 0 ||
             PyType_Ready(&dapEventsSocket_dapEventsSocketType) < 0 ||
             PyType_Ready(&CryptoKeyTypeObjecy_CryptoKeyTypeObjecyType) < 0 ||
-            PyType_Ready(&CryptoDataTypeObjecy_CryptoDataTypeObjecyType) < 0)
+            PyType_Ready(&CryptoDataTypeObjecy_CryptoDataTypeObjecyType) < 0 ||
+            // === Chain ===
+            PyType_Ready(&dapChainObject_dapChainType) < 0 ||
+            PyType_Ready(&dapChainTypeObject_dapChainTypeType) < 0 ||
+            PyType_Ready(&dapChainAtomPtr_dapChainAtomPtrType) < 0 ||
+            PyType_Ready(&DapChainCell_DapChainCellObjectType) < 0 ||
+            PyType_Ready(&ChainCommonObject_ChainCommonType) < 0 ||
+            PyType_Ready(&DapChainCsObject_DapChainCsObjectType) < 0 ||
+            PyType_Ready(&DapChainDatumTypeIdObject_DapChainDatumTypeIdObjectType) < 0 ||
+            PyType_Ready(&DapChainDatumObject_DapChainDatumObjectType) < 0 ||
+            PyType_Ready(&DapChainDatumIterObject_DapChainDatumIterObjectType) < 0 ||
+            PyType_Ready(&DapChainDatumToken_DapChainDatumTokenObjectType) < 0 ||
+            PyType_Ready(&DapChainDatumTokenEmission_DapChainDatumTokenEmissionObjectType) < 0 ||
+            PyType_Ready(&DapChainTxItemObject_DapChainTxItemTypeObjectType) < 0 ||
+            PyType_Ready(&DapChainTxType_DapChainTxCondTypeObject) < 0 ||
+            PyType_Ready(&DapChainDatumTx_DapChainDatumTxObjectType) < 0 ||
+            PyType_Ready(&DapChainTxOutCond_DapChainTxOutCondObjectType) < 0
+//            PyType_Ready(&DapChainLedger_DapChainLedgerType) < 0
+            // =============
+            )
                return NULL;
 
     PyObject *module = PyModule_Create(&CellFramePythonModule);
@@ -131,6 +157,25 @@ PyMODINIT_FUNC PyInit_CellFrame(void){
     PyModule_AddObject(module, "CryptoKeyType", (PyObject*)&CryptoKeyTypeObjecy_CryptoKeyTypeObjecyType);
     PyModule_AddObject(module, "CryptoDataType", (PyObject*)&CryptoDataTypeObjecy_CryptoDataTypeObjecyType);
 
+    // === Chain ===
+    PyModule_AddObject(module, "Chain", (PyObject*)&dapChainObject_dapChainType);
+    PyModule_AddObject(module, "ChainType", (PyObject*)&dapChainTypeObject_dapChainTypeType);
+    PyModule_AddObject(module, "ChainAtomIter", (PyObject*)&dapChainAtomPtr_dapChainAtomPtrType);
+    PyModule_AddObject(module, "ChainCell", (PyObject*)&DapChainCell_DapChainCellObjectType);
+    PyModule_AddObject(module, "ChainCommon", (PyObject*)&ChainCommonObject_ChainCommonType);
+    PyModule_AddObject(module, "ChainCS", (PyObject*)&DapChainCsObject_DapChainCsObjectType);
+    PyModule_AddObject(module, "ChainDatumTypeID", (PyObject*)&DapChainDatumTypeIdObject_DapChainDatumTypeIdObjectType);
+    PyModule_AddObject(module, "ChainDatum", (PyObject*)&DapChainDatumObject_DapChainDatumObjectType);
+    PyModule_AddObject(module, "ChainDatumIter", (PyObject*)&DapChainDatumIterObject_DapChainDatumIterObjectType);
+    PyModule_AddObject(module, "ChainDatumToken", (PyObject*)&DapChainDatumToken_DapChainDatumTokenObjectType);
+    PyModule_AddObject(module, "ChainDatumTokenEmisson", (PyObject*)&DapChainDatumTokenEmission_DapChainDatumTokenEmissionObjectType);
+    PyModule_AddObject(module, "ChainTxItemType", (PyObject*)&DapChainTxItemObject_DapChainTxItemTypeObjectType);
+    PyModule_AddObject(module, "ChainTxCondType", (PyObject*)&DapChainTxType_DapChainTxCondTypeObject);
+    PyModule_AddObject(module, "ChainDatumTx", (PyObject*)&DapChainDatumTx_DapChainDatumTxObjectType);
+    PyModule_AddObject(module, "ChainTxOutCond", (PyObject*)&DapChainTxOutCond_DapChainTxOutCondObjectType);
+//    PyModule_AddObject(module, "ChainLedger", (PyObject*)&DapChainLedger_DapChainLedgerType);
+    // =============
+
 
     return module;
 }
@@ -140,6 +185,9 @@ static PyObject *python_cellframe_deinit(PyObject *self, PyObject *args){
     dap_config_deinit();
     if (init_crypto)
         dap_crypto_deinit();
+    if (init_chain){
+        deinit_chain_py();
+    }
     return PyLong_FromLong(0);
 }