diff --git a/modules/cellframe-sdk/type/dag/include/wrapping_dap_chain_cs_dag.h b/modules/cellframe-sdk/type/dag/include/wrapping_dap_chain_cs_dag.h
new file mode 100644
index 0000000000000000000000000000000000000000..c978669c81ab073b5baf88fe88c09c2e5c4ca159
--- /dev/null
+++ b/modules/cellframe-sdk/type/dag/include/wrapping_dap_chain_cs_dag.h
@@ -0,0 +1,70 @@
+#pragma once
+
+#include <Python.h>
+#include "dap_chain_cs_dag.h"
+#include "wrapping_dap_chain_cs_dag_event.h"
+#include "wrapping_dap_hash.h"
+#include "wrapping_dap_chain_atom_ptr.h"
+#include "libdap_chain_atom_iter_python.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+typedef struct PyDapChainCsDag {
+    PyObject_HEAD
+    dap_chain_cs_dag_t *dag;
+} PyDapChainCsDagObject;
+
+PyObject *dap_chain_cs_dag_find_event_by_hash_py(PyObject *self, PyObject *args);
+
+static PyMethodDef DapChainCsDagMethods[] = {
+        {"findByHash", (PyCFunction)dap_chain_cs_dag_find_event_by_hash_py, METH_VARARGS, ""},
+        {NULL, NULL, 0, NULL}
+};
+
+static PyTypeObject DapChainCsDag_DapChainCsDagType = {
+        PyVarObject_HEAD_INIT(NULL, 0)
+        "CellFrame.ChainCsDag",                                            /* tp_name */
+        sizeof(PyDapChainCsDagObject),                                     /* 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 cs dag objects",                                              /* tp_doc */
+        0,                                                              /* tp_traverse */
+        0,                                                              /* tp_clear */
+        0,                                                              /* tp_richcompare */
+        0,                                                              /* tp_weaklistoffset */
+        0,                                                              /* tp_iter */
+        0,                                                            /* tp_iternext */
+        DapChainCsDagMethods,                                        /* 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
diff --git a/modules/cellframe-sdk/type/dag/include/wrapping_dap_chain_cs_dag_event.h b/modules/cellframe-sdk/type/dag/include/wrapping_dap_chain_cs_dag_event.h
new file mode 100644
index 0000000000000000000000000000000000000000..e4c1dfb58b5f72d1d900861c35cce549fb96dbd7
--- /dev/null
+++ b/modules/cellframe-sdk/type/dag/include/wrapping_dap_chain_cs_dag_event.h
@@ -0,0 +1,85 @@
+#pragma once
+
+#include <Python.h>
+#include <datetime.h>
+#include "dap_chain_cs_dag_event.h"
+#include "wrapping_dap_chain_common.h"
+#include "wrapping_dap_hash.h"
+#include "wrapping_dap_chain_datum.h"
+
+typedef struct PyDapChainCsDagEvent{
+    PyObject_HEAD
+    dap_chain_cs_dag_event_t *event;
+    size_t event_size;
+}PyDapChainCsDagEventObject;
+
+PyObject *wrapping_dap_chain_cs_dag_event_get_version(PyObject *self, void *closure);
+PyObject *wrapping_dap_chain_cs_dag_event_get_round_id(PyObject *self, void *closure);
+PyObject *wrapping_dap_chain_cs_dag_event_get_ts_created(PyObject *self, void *closure);
+PyObject *wrapping_dap_chain_cs_dag_event_get_chain_id(PyObject *self, void *closure);
+PyObject *wrapping_dap_chain_cs_dag_event_get_cell_id(PyObject *self, void *closure);
+PyObject *wrapping_dap_chain_cs_dag_event_get_hash_count(PyObject *self, void *closure);
+PyObject *wrapping_dap_chain_cs_dag_event_get_signs_count(PyObject *self, void *closure);
+PyObject *wrapping_dap_chain_cs_dag_event_get_links(PyObject *self, void *closure);
+PyObject *wrapping_dap_chain_cs_dag_event_get_datum(PyObject *self, void *closure);
+PyObject *wrapping_dap_chain_cs_dag_event_get_signs(PyObject *self, void *closure);
+
+static PyMethodDef PyDapChainCsDagEventMethodsDef[] = {
+        {NULL, NULL, 0, NULL}
+};
+
+static PyGetSetDef PyDapChainCsDagEventGetsSetsDef[] = {
+        {"version", (getter)wrapping_dap_chain_cs_dag_event_get_version, NULL, NULL, NULL},
+        {"roundId", (getter)wrapping_dap_chain_cs_dag_event_get_round_id, NULL, NULL, NULL},
+        {"created", (getter)wrapping_dap_chain_cs_dag_event_get_ts_created, NULL, NULL, NULL},
+        {"chainId", (getter)wrapping_dap_chain_cs_dag_event_get_chain_id, NULL, NULL, NULL},
+        {"cellId", (getter)wrapping_dap_chain_cs_dag_event_get_cell_id, NULL, NULL, NULL},
+        {"hashCount", (getter)wrapping_dap_chain_cs_dag_event_get_hash_count, NULL, NULL, NULL},
+        {"signsCount", (getter)wrapping_dap_chain_cs_dag_event_get_signs_count, NULL, NULL, NULL},
+        {"links", (getter)wrapping_dap_chain_cs_dag_event_get_links, NULL, NULL, NULL},
+        {"datum", (getter)wrapping_dap_chain_cs_dag_event_get_datum, NULL, NULL, NULL},
+        {"signs", (getter)wrapping_dap_chain_cs_dag_event_get_signs, NULL, NULL, NULL},
+        {NULL}
+};
+
+static PyTypeObject DapChainCsDagEvent_DapChainCsDagEventType = {
+        PyVarObject_HEAD_INIT(NULL, 0)
+        "CellFrame.ChainCsDagEvent",                                            /* tp_name */
+        sizeof(PyDapChainCsDagEventObject),                                     /* 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 cs dag event objects",                                              /* tp_doc */
+        0,		                                                      /* tp_traverse */
+        0,		                                                      /* tp_clear */
+        0,		                                                      /* tp_richcompare */
+        0,		                                                      /* tp_weaklistoffset */
+        0,		                                                      /* tp_iter */
+        0,		                                                      /* tp_iternext */
+        PyDapChainCsDagEventMethodsDef,                             /* tp_methods */
+        0,                                                            /* tp_members */
+        PyDapChainCsDagEventGetsSetsDef,                             /* 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 */
+};
diff --git a/modules/cellframe-sdk/type/dag/src/wrapping_dap_chain_cs_dag.c b/modules/cellframe-sdk/type/dag/src/wrapping_dap_chain_cs_dag.c
new file mode 100644
index 0000000000000000000000000000000000000000..a1c95f383ecb93bafa12baefc9cde9f6674684fe
--- /dev/null
+++ b/modules/cellframe-sdk/type/dag/src/wrapping_dap_chain_cs_dag.c
@@ -0,0 +1,39 @@
+#include "wrapping_dap_chain_cs_dag.h"
+#include "dap_chain_cell.h"
+
+PyObject *dap_chain_cs_dag_find_event_by_hash_py(PyObject *self, PyObject *args){
+    PyObject *obj_hash;
+    PyObject *obj_atom_iter;
+    if (!PyArg_ParseTuple(args, "O", &obj_hash)){
+        PyErr_SetString(PyExc_AttributeError, "This function must take two arguments. ");
+        return NULL;
+    }
+    bool isCheck = PyObject_TypeCheck(obj_hash, &DapHashFastObject_DapHashFastObjectType);
+//    if (!isCheck){
+//        PyErr_SetString(PyExc_AttributeError, "The first argument to this function is not a DapHash object.");
+//        return NULL;
+//    }
+//    if (!PyDapChainAtomIter_Check(obj_atom_iter)){
+//        PyErr_SetString(PyExc_AttributeError, "The second argument received to this function is not an object of type ChainAtomIter.");
+//        return NULL;
+//    }
+    dap_chain_cell_t *l_cell = ((PyDapChainCsDagObject*)self)->dag->chain->cells;
+    size_t size_atom = 0;
+    dap_chain_atom_iter_t *l_iter = ((PyDapChainCsDagObject*)self)->dag->chain->callback_atom_iter_create(
+            ((PyDapChainCsDagObject*)self)->dag->chain,
+            l_cell->id
+            );
+    dap_chain_atom_ptr_t l_ptr = ((PyDapChainCsDagObject*)self)->dag->chain->callback_atom_find_by_hash(
+            l_iter,
+            ((PyDapHashFastObject*)obj_hash)->hash_fast,
+            &size_atom);
+    if (l_ptr == NULL){
+        return Py_None;
+    }
+    PyDapChainCsDagEventObject *obj_event = PyObject_New(PyDapChainCsDagEventObject,
+                                                         &DapChainCsDagEvent_DapChainCsDagEventType);
+    PyObject_Dir((PyObject*)obj_event);
+    obj_event->event = l_iter->cur;
+    obj_event->event_size = l_iter->cur_size;
+    return (PyObject*)obj_event;
+}
\ No newline at end of file
diff --git a/modules/cellframe-sdk/type/dag/src/wrapping_dap_chain_cs_dag_event.c b/modules/cellframe-sdk/type/dag/src/wrapping_dap_chain_cs_dag_event.c
new file mode 100644
index 0000000000000000000000000000000000000000..049cc4f303748c6bc6e2d8df46396922566c7ae4
--- /dev/null
+++ b/modules/cellframe-sdk/type/dag/src/wrapping_dap_chain_cs_dag_event.c
@@ -0,0 +1,81 @@
+#include "wrapping_dap_chain_cs_dag_event.h"
+
+PyObject *wrapping_dap_chain_cs_dag_event_get_version(PyObject *self, void *closure){
+    (void)closure;
+    return Py_BuildValue("H", ((PyDapChainCsDagEventObject*)self)->event->header.version);
+}
+PyObject *wrapping_dap_chain_cs_dag_event_get_round_id(PyObject *self, void *closure){
+    (void)closure;
+    return Py_BuildValue("k", ((PyDapChainCsDagEventObject*)self)->event->header.round_id);
+}
+PyObject *wrapping_dap_chain_cs_dag_event_get_ts_created(PyObject *self, void *closure){
+    (void)closure;
+    PyDateTime_IMPORT;
+    PyObject *obj_ts_float = PyLong_FromLong(((PyDapChainCsDagEventObject*)self)->event->header.ts_created);
+    PyObject *obj_ts = Py_BuildValue("(O)", obj_ts_float);
+    PyDateTime_IMPORT;
+    PyObject *obj_dt = PyDateTime_FromTimestamp(obj_ts);
+    return obj_dt;
+}
+PyObject *wrapping_dap_chain_cs_dag_event_get_chain_id(PyObject *self, void *closure){
+    (void)closure;
+    PyDapChainIDObject *obj_chain_id = PyObject_New(PyDapChainIDObject, &DapChainIDObject_DapChainIDType);
+    PyObject_Dir((PyObject*)obj_chain_id);
+    obj_chain_id->chain_id = &((PyDapChainCsDagEventObject*)self)->event->header.chain_id;
+    return (PyObject*)obj_chain_id;
+}
+PyObject *wrapping_dap_chain_cs_dag_event_get_cell_id(PyObject *self, void *closure){
+    (void)closure;
+    PyDapChainCellIDObject *obj_cell_id = PyObject_New(PyDapChainCellIDObject, &DapChainCellIDObject_DapChainCellIDType);
+    PyObject_Dir((PyObject*)obj_cell_id);
+    obj_cell_id->cell_id = ((PyDapChainCsDagEventObject*)self)->event->header.cell_id;
+    return (PyObject*)obj_cell_id;
+}
+PyObject *wrapping_dap_chain_cs_dag_event_get_hash_count(PyObject *self, void *closure){
+    (void)closure;
+    return Py_BuildValue("H", ((PyDapChainCsDagEventObject*)self)->event->header.hash_count);
+}
+PyObject *wrapping_dap_chain_cs_dag_event_get_signs_count(PyObject *self, void *closure){
+    (void)closure;
+    return Py_BuildValue("H", ((PyDapChainCsDagEventObject*)self)->event->header.signs_count);
+}
+PyObject *wrapping_dap_chain_cs_dag_event_get_links(PyObject *self, void *closure){
+    (void)closure;
+    PyObject *obj_list = PyList_New(((PyDapChainCsDagEventObject*)self)->event->header.hash_count);
+    for (uint16_t i=0; i < ((PyDapChainCsDagEventObject*)self)->event->header.hash_count; i++){
+        PyDapHashFastObject  *obj_hf = PyObject_New(PyDapHashFastObject, &DapHashFastObject_DapHashFastObjectType);
+        PyObject_Dir((PyObject*)obj_hf);
+        obj_hf->hash_fast =
+                (dap_chain_hash_fast_t *) (((PyDapChainCsDagEventObject*)self)->event->hashes_n_datum_n_signs +
+                                                                    i*sizeof (dap_chain_hash_fast_t));
+        PyList_SetItem(obj_list, i, obj_hf);
+    }
+    return obj_list;
+}
+PyObject *wrapping_dap_chain_cs_dag_event_get_datum(PyObject *self, void *closure){
+    (void)closure;
+    size_t l_offset =  ((PyDapChainCsDagEventObject*)self)->event->header.hash_count*sizeof (dap_chain_hash_fast_t);
+    PyDapChainDatumObject *datum = PyObject_New(PyDapChainDatumObject, &DapChainDatumObject_DapChainDatumObjectType);
+    PyObject_Dir((PyObject*)datum);
+    datum->datum = (dap_chain_datum_t*) (((PyDapChainCsDagEventObject*)self)->event->hashes_n_datum_n_signs + l_offset);
+    return (PyObject*)datum;
+}
+PyObject *wrapping_dap_chain_cs_dag_event_get_signs(PyObject *self, void *closure){
+    size_t l_offset =  ((PyDapChainCsDagEventObject*)self)->event->header.hash_count*sizeof (dap_chain_hash_fast_t);
+    dap_chain_datum_t  *l_datum = (dap_chain_datum_t*) (((PyDapChainCsDagEventObject*)self)->event->hashes_n_datum_n_signs + l_offset);
+    l_offset += dap_chain_datum_size(l_datum);
+    PyObject *obj_list = PyList_New(0);
+    while (l_offset + sizeof(((PyDapChainCsDagEventObject*)self)->event->header) < ((PyDapChainCsDagEventObject*)self)->event_size){
+        dap_sign_t * l_sign =(dap_sign_t *) (((PyDapChainCsDagEventObject*)self)->event->hashes_n_datum_n_signs +l_offset);
+        size_t l_sign_size = dap_sign_get_size(l_sign);
+        if (l_sign_size == 0){
+            break;
+        }
+        PyDapSignObject *obj_sign = PyObject_New(PyDapSignObject, &DapSignObject_DapSignObjectType);
+        PyObject_Dir((PyObject*)obj_sign);
+        obj_sign->sign = l_sign;
+        PyList_Append(obj_list, (PyObject*)obj_sign);
+        l_offset += l_sign_size;
+    }
+    return obj_list;
+}