diff --git a/modules/common/dap_chain_common.c b/modules/common/dap_chain_common.c
index 17033619a799a78f5df5fd13544550d0618251f4..5c261fccd23ba1f7906688c7f76025e492c9b959 100644
--- a/modules/common/dap_chain_common.c
+++ b/modules/common/dap_chain_common.c
@@ -84,6 +84,8 @@ char* dap_chain_addr_to_str(const dap_chain_addr_t *a_addr)
     if ( a_addr ==NULL)
         return  NULL;
 
+    if (dap_chain_addr_is_blank(a_addr)) return dap_strdup("null");
+
     size_t l_ret_size = DAP_ENC_BASE58_ENCODE_SIZE(sizeof(dap_chain_addr_t));
     char * l_ret = DAP_NEW_SIZE(char, l_ret_size);
     if(dap_enc_base58_encode(a_addr, sizeof(dap_chain_addr_t), l_ret) > 0)
@@ -104,6 +106,9 @@ dap_chain_addr_t* dap_chain_addr_from_str(const char *a_str)
     size_t l_str_len = (a_str) ? strlen(a_str) : 0;
     if(l_str_len <= 0)
         return NULL;
+    if (dap_strcmp(a_str, "null") == 0) {
+        return DAP_NEW_Z(dap_chain_addr_t);
+    }
     size_t l_ret_size = DAP_ENC_BASE58_DECODE_SIZE(l_str_len);
     dap_chain_addr_t * l_addr = DAP_NEW_Z_SIZE(dap_chain_addr_t, l_ret_size);
     if(dap_enc_base58_decode(a_str, l_addr) == sizeof(dap_chain_addr_t) &&
@@ -114,6 +119,11 @@ dap_chain_addr_t* dap_chain_addr_from_str(const char *a_str)
     return NULL;
 }
 
+bool dap_chain_addr_is_blank(const dap_chain_addr_t *a_addr){
+    dap_chain_addr_t l_addr_blank = {0};
+    return !memcmp(a_addr, &l_addr_blank, sizeof(dap_chain_addr_t));
+}
+
 /**
  * @brief dap_chain_net_srv_uid_from_str
  * @param a_net_str
@@ -207,6 +217,7 @@ int dap_chain_addr_check_sum(const dap_chain_addr_t *a_addr)
 {
     if(!a_addr)
         return -1;
+    if (dap_chain_addr_is_blank(a_addr)) return 1;
     dap_chain_hash_fast_t l_checksum;
     // calc checksum
     dap_hash_fast(a_addr, sizeof(dap_chain_addr_t) - sizeof(dap_chain_hash_fast_t), &l_checksum);
diff --git a/modules/common/dap_chain_datum_tx_items.c b/modules/common/dap_chain_datum_tx_items.c
index f82d50fffaf4dea89671ffa7d7d0e8d1cf34f11e..765b25da21f9ff1655f9778db5bf5a3570d23dc2 100644
--- a/modules/common/dap_chain_datum_tx_items.c
+++ b/modules/common/dap_chain_datum_tx_items.c
@@ -275,10 +275,10 @@ dap_chain_tx_in_cond_t* dap_chain_datum_tx_item_in_cond_create(dap_chain_hash_fa
  */
 dap_chain_tx_out_t* dap_chain_datum_tx_item_out_create(const dap_chain_addr_t *a_addr, uint256_t a_value)
 {
-    if (IS_ZERO_256(a_value))
+    if (!a_addr || IS_ZERO_256(a_value))
         return NULL;
     dap_chain_tx_out_t *l_item = DAP_NEW_Z(dap_chain_tx_out_t);
-    l_item->addr = a_addr ? *a_addr : (dap_chain_addr_t) { 0 };
+    l_item->addr = *a_addr;
     l_item->header.type = TX_ITEM_TYPE_OUT;
     l_item->header.value = a_value;
     return l_item;
diff --git a/modules/common/include/dap_chain_common.h b/modules/common/include/dap_chain_common.h
index 1ec63018bce6e77c14cd4e00360086a9b50c2ba3..41f82afb33bda2959d91e39eaa3b543bd8b66fbd 100644
--- a/modules/common/include/dap_chain_common.h
+++ b/modules/common/include/dap_chain_common.h
@@ -242,6 +242,7 @@ size_t dap_chain_hash_slow_to_str(dap_chain_hash_slow_t * a_hash, char * a_str,
 
 char* dap_chain_addr_to_str(const dap_chain_addr_t *a_addr);
 dap_chain_addr_t* dap_chain_addr_from_str(const char *str);
+bool dap_chain_addr_is_blank(const dap_chain_addr_t *a_addr);
 
 dap_chain_net_srv_uid_t dap_chain_net_srv_uid_from_str(const char* a_str);
 
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 8c3500617ca9d4ef31f5fa08626382cc2e779f2b..927f41c99cb29b6f39981f4e5f1a3b7b01ae55cf 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -4958,7 +4958,7 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
     }
 
     // Check, if network ID is same as ID in destination wallet address. If not - operation is cancelled.
-    if (l_addr_to->net_id.uint64 != l_net->pub.id.uint64) {
+    if (!dap_chain_addr_is_blank(l_addr_to) && l_addr_to->net_id.uint64 != l_net->pub.id.uint64) {
         dap_cli_server_cmd_set_reply_text(str_reply, "destination wallet network ID=0x%llx and network ID=0x%llx is not equal. Please, change network name or wallet address",
                                             l_addr_to->net_id.uint64, l_net->pub.id.uint64);
         return -13;
diff --git a/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c b/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c
index 5fae0fbe77461e1d71ad0a1e3cd053fa2fc93dd7..a4d7c74178fd1d6274ae8fa1e83ee5c7cbbe7d1a 100644
--- a/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c
+++ b/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c
@@ -533,7 +533,8 @@ static enum error_code s_cli_take(int a_argc, char **a_argv, int a_arg_index, da
 
     //add burning tx
     if (l_tx_out_cond->subtype.srv_stake_lock.flags & DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_CREATE_BASE_TX) {
-        if (NULL == (l_datum_burning_tx = dap_chain_burning_tx_create(l_chain, l_owner_key, l_owner_addr, NULL,
+        dap_chain_addr_t l_addr_blank = {0};
+        if (NULL == (l_datum_burning_tx = dap_chain_burning_tx_create(l_chain, l_owner_key, l_owner_addr, &l_addr_blank,
                                                                   delegate_ticker_str, l_value_delegated))) {//malloc
             dap_chain_wallet_close(l_wallet);
             DAP_DEL_Z(l_owner_addr);
@@ -1291,7 +1292,7 @@ dap_chain_datum_t *dap_chain_burning_tx_create(dap_chain_t *a_chain, dap_enc_key
 {
     // check valid param
     if(!a_chain | !a_key_from || ! a_addr_from || !a_key_from->priv_key_data || !a_key_from->priv_key_data_size ||
-       !dap_chain_addr_check_sum(a_addr_from) || (a_addr_to && !dap_chain_addr_check_sum(a_addr_to)) || IS_ZERO_256(a_value))
+       !dap_chain_addr_check_sum(a_addr_from) || !a_addr_to || !dap_chain_addr_check_sum(a_addr_to) || IS_ZERO_256(a_value))
         return NULL;
 
     // find the transactions from which to take away coins