diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index 6187098129a4e09691b0d2927fb6a25d89920174..7dcdfebc131719842b5760c979d95c627168c97e 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -199,6 +199,12 @@ int dap_chain_cs_blocks_init()
             "block -net <net_name> -chain <chain_name> count\n"
                 "\t\t Show count block\n\n"
 
+            "block -net <net_name> -chain <chain_name> last\n\n"
+                "\t\tShow last block in chain\n\n"
+
+            "block -net <net_name> -chain <chain_name> find -datum <datum_hash>\n\n"
+                "\t\tSearches and shows blocks that contains specify datum\n\n"
+
         "Commission collect:\n"
             "block -net <net_name> -chain <chain_name> fee collect"
             " -cert <priv_cert_name> -addr <addr> -hashes <hashes_list> -fee <value>\n"
@@ -227,6 +233,7 @@ int dap_chain_cs_blocks_init()
             " -cert <priv_cert_name> -addr <addr>\n"
                 "\t\t Update reward and fees block table."
                     " Automatic collection of commission in case of triggering of the setting\n\n"
+        
                                         );
     if( dap_chain_block_cache_init() ) {
         log_it(L_WARNING, "Can't init blocks cache");
@@ -1024,7 +1031,7 @@ static int s_cli_blocks(int a_argc, char ** a_argv, void **a_str_reply)
             json_object* json_obj_out = json_object_new_object();
             dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-datum", &l_datum_hash_str);
             if (!l_datum_hash_str) {
-                dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_BLOCK_PARAM_ERR, "Command 'block find' requires parameter '-datum'");
+                dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_BLOCK_PARAM_ERR, "Command 'event find' requires parameter '-datum'");
                 return DAP_CHAIN_NODE_CLI_COM_BLOCK_PARAM_ERR;
             }
             dap_hash_fast_t l_datum_hash = {};
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index 67873458c38e37938a0ac7d2c3368d4a3430f966..e76632f478b2ba70d0dc29578d3d12774815db43 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -164,6 +164,10 @@ int dap_chain_cs_dag_init()
                                         "\tComplete the current new round, verify it and if everything is ok - publish new events in chain\n"
         "dag round find -net <net_name> -chain <chain_name> -datum <datum_hash> \n"
             "\tSearches for rounds that have events that contain the specified datum.\n\n"
+        "dag event last -net <net_name> -chain <chain_name> \n"
+            "\tShow last event in chain\n\n"
+        "dag event find -net <net_name> -chain <chain_name> -datum <datum_hash>\n"
+            "\tSearches for events that contain the specified datum.\n\n"
                                         );
     log_it(L_NOTICE,"Initialized DAG chain items organization class");
     return 0;
@@ -1521,6 +1525,10 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
             l_event_subcmd = SUBCMD_EVENT_SIGN;
         } else if (strcmp(l_event_cmd_str, "count") == 0) {
             l_event_subcmd = SUBCMD_EVENT_COUNT;
+        } else if (strcmp(l_event_cmd_str, "last") == 0) {
+            l_event_subcmd = SUBCMD_EVENT_LAST;
+        } else if (strcmp(l_event_cmd_str, "find") == 0) {
+            l_event_subcmd = SUBCMD_EVENT_FIND;
         } else {
             l_event_subcmd = SUBCMD_UNDEFINED;
         }
@@ -1841,25 +1849,50 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                 json_object_array_add(*json_arr_reply, json_obj_event_count);
             } break;
             case SUBCMD_EVENT_LAST:{
+                json_object * json_obj_out = json_object_new_object();
                 char l_tmp_buff[70]={0};
                 dap_string_t *l_ret_str = dap_string_new(NULL);
                 pthread_mutex_lock(&PVT(l_dag)->events_mutex);
                 dap_chain_cs_dag_event_item_t *l_last_event = HASH_LAST(PVT(l_dag)->events);
                 pthread_mutex_unlock(&PVT(l_dag)->events_mutex);
                 char l_buf[DAP_TIME_STR_SIZE];
-                dap_time_to_str_rfc822(l_buf, DAP_TIME_STR_SIZE, l_last_event->ts_added);
-                char buf[DAP_TIME_STR_SIZE];
-                dap_time_to_str_rfc822(buf, DAP_TIME_STR_SIZE, l_last_event->header.ts_created);
-                json_object_object_add(json_obj_out, "Last block num",json_object_new_uint64(l_last_block->block_number));
-                json_object_object_add(json_obj_out, "Last block hash",json_object_new_string(l_last_block->block_hash_str));
+                dap_time_to_str_rfc822(l_buf, DAP_TIME_STR_SIZE, l_last_event->event->header.ts_created);
+
+                json_object_object_add(json_obj_out, "Last atom hash in events",json_object_new_string(dap_hash_fast_to_str_static(&l_last_event->hash)));
                 json_object_object_add(json_obj_out, "ts_create",json_object_new_string(l_buf));
 
-                sprintf(l_tmp_buff,"%s.%s has blocks - ",l_net->pub.name,l_chain->name);
-                json_object_object_add(json_obj_out, l_tmp_buff, json_object_new_uint64(PVT(l_blocks)->blocks_count));
+                size_t l_event_count = HASH_COUNT(PVT(l_dag)->events);
+                sprintf(l_tmp_buff,"%s.%s has events - ",l_net->pub.name,l_chain->name);
+                json_object_object_add(json_obj_out, l_tmp_buff, json_object_new_uint64(l_event_count));
                 json_object_array_add(*json_arr_reply, json_obj_out);
             } break;
             case SUBCMD_EVENT_FIND:{
-
+                const char* l_datum_hash_str = NULL;
+                json_object* json_obj_out = json_object_new_object();
+                dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-datum", &l_datum_hash_str);
+                if (!l_datum_hash_str) {
+                    dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_DAG_PARAM_ERR, "Command 'event find' requires parameter '-datum'");
+                    ret = DAP_CHAIN_NODE_CLI_COM_DAG_PARAM_ERR;
+                }
+                dap_hash_fast_t l_datum_hash = {};
+                int ret_code = 0;
+                int l_atoms_cnt = 0;
+                dap_chain_hash_fast_from_str(l_datum_hash_str, &l_datum_hash);
+                pthread_mutex_lock(&PVT(l_dag)->events_mutex);
+                // dap_chain_cs_dag_event_item_t *l_curr_event = PVT(l_dag)->events;
+                dap_chain_cs_dag_event_item_t *l_curr_event = NULL, *l_temp;
+                json_object* json_arr_bl_cache_out = json_object_new_array();
+                // for (;l_curr_event;l_curr_event = l_curr_event->hh.next)
+                HASH_ITER(hh, PVT(l_dag)->events, l_curr_event, l_temp){
+                    if (l_curr_event && dap_hash_fast_compare(&l_datum_hash, &l_curr_event->datum_hash)){
+                        json_object_array_add(json_arr_bl_cache_out, json_object_new_string(dap_hash_fast_to_str_static(&l_curr_event->hash)));
+                        l_atoms_cnt++;
+                    }
+                }
+                pthread_mutex_unlock(&PVT(l_dag)->events_mutex);
+                json_object_object_add(json_obj_out, "Events", json_arr_bl_cache_out);
+                json_object_object_add(json_obj_out, "Total",json_object_new_int(l_atoms_cnt));
+                json_object_array_add(*json_arr_reply, json_obj_out);
             } break;
             case SUBCMD_EVENT_SIGN: { // Sign event command
                 json_object * json_obj_event_count = json_object_new_object();