diff --git a/CellFrameDashboardGUI/DapCommandController.cpp b/CellFrameDashboardGUI/DapCommandController.cpp
index 47562227a6d7cb21cf7422882613cefa457157d7..11d2e5225f6dac4904369f25a9c3338de0b88aba 100755
--- a/CellFrameDashboardGUI/DapCommandController.cpp
+++ b/CellFrameDashboardGUI/DapCommandController.cpp
@@ -1,5 +1,8 @@
 #include "DapCommandController.h"
 
+#include <DapNodeType.h>
+#include <QDataStream>
+
 /// Overloaded constructor.
 /// @param apIODevice Data transfer device.
 /// @param apParent Parent.
@@ -36,7 +39,7 @@ void DapCommandController::processCommandResult()
         qWarning() << "Invalid response received";
         return;
     }
-    emit sigCommandResult(reply->response().result());
+    emit sigCommandResult(reply->response().toJsonValue());
 }
 
 /// Get node logs.
@@ -51,6 +54,7 @@ void DapCommandController::getHistory()
 {
     DapRpcServiceReply *reply = m_DAPRpcSocket->invokeRemoteMethod("RPCServer.getHistory");
     connect(reply, SIGNAL(finished()), this, SLOT(processGetHistory()));
+
 }
 
 void DapCommandController::setNewHistory(const QVariant& aData)
@@ -92,8 +96,8 @@ void DapCommandController::processGetNodeLogs()
         qWarning() << "Invalid response received";
         return;
     }
-    emit sigCommandResult(reply->response().result());
-    emit sigNodeLogsReceived(reply->response().result().toVariant().toStringList());
+    emit sigCommandResult(reply->response().toJsonValue());
+    emit sigNodeLogsReceived(reply->response().toJsonValue().toVariant().toStringList());
 }
 
 ///
@@ -105,9 +109,9 @@ void DapCommandController::processAddWallet()
         qWarning() << "Invalid response received";
         return;
     }
-    emit sigCommandResult(reply->response().result());
-    auto name = reply->response().result().toVariant().toStringList().at(0);
-    auto address = reply->response().result().toVariant().toStringList().at(1);
+    emit sigCommandResult(reply->response().toJsonValue());
+    auto name = reply->response().toJsonValue().toVariant().toStringList().at(0);
+    auto address = reply->response().toJsonValue().toVariant().toStringList().at(1);
     emit sigWalletAdded(name, address);
 }
 
@@ -120,8 +124,8 @@ void DapCommandController::processSendToken()
         return;
     }
     qInfo() << reply->response();
-    emit sigCommandResult(reply->response().result());
-    auto answer = reply->response().result().toVariant().toString();
+    emit sigCommandResult(reply->response().toJsonValue());
+    auto answer = reply->response().toJsonValue().toVariant().toString();
     emit onTokenSended(answer);
 }
 
@@ -133,22 +137,22 @@ void DapCommandController::processGetWallets()
         qWarning() << "Invalid response received";
         return;
     }
-    emit sigCommandResult(reply->response().result());
-    emit sigWalletsReceived(reply->response().result().toVariant().toMap());
+    emit sigCommandResult(reply->response().toJsonValue());
+    emit sigWalletsReceived(reply->response().toJsonValue().toVariant().toMap());
 }
 
 void DapCommandController::processGetWalletInfo()
 {
     qInfo() << "processGetWalletInfo()";
     DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    if (!reply || reply->response().result().toVariant().toStringList().count() <= 0) {
+    if (!reply || reply->response().toJsonValue().toVariant().toStringList().count() <= 0) {
         qWarning() << "Invalid response received";
         return;
     }
-    emit sigCommandResult(reply->response().result());
-    QString name = reply->response().result().toVariant().toStringList().at(0);
-    QString address = reply->response().result().toVariant().toStringList().at(1);
-    QStringList temp = reply->response().result().toVariant().toStringList();
+    emit sigCommandResult(reply->response().toJsonValue());
+    QString name = reply->response().toJsonValue().toVariant().toStringList().at(0);
+    QString address = reply->response().toJsonValue().toVariant().toStringList().at(1);
+    QStringList temp = reply->response().toJsonValue().toVariant().toStringList();
     QStringList tokens;
     QStringList balance;
     for(int x{2}; x < temp.count(); x++)
@@ -171,49 +175,49 @@ void DapCommandController::processGetWalletInfo()
 void DapCommandController::processGetNodeNetwork()
 {
     DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    emit sendNodeNetwork(reply->response().result().toVariant());
+    emit sendNodeNetwork(reply->response().toJsonValue().toVariant());
 }
 
 void DapCommandController::processGetNodeStatus()
 {
     DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    emit sendNodeStatus(reply->response().result().toVariant());
+    emit sendNodeStatus(reply->response().toJsonValue().toVariant());
 }
 
 void DapCommandController::processExecuteCommand()
 {
     qInfo() << "processGetWalletInfo()";
     DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    if (!reply || reply->response().result().toVariant().toStringList().isEmpty()) {
+    if (!reply || reply->response().toJsonValue().toVariant().toStringList().isEmpty()) {
 
         QString result = "Invalid response received";
         qWarning() << result;
         emit executeCommandChanged(result);
         return;
     }
-    emit sigCommandResult(reply->response().result());
-    QString result = reply->response().result().toVariant().toStringList().at(0);
+    emit sigCommandResult(reply->response().toJsonValue());
+    QString result = reply->response().toJsonValue().toVariant().toStringList().at(0);
     emit executeCommandChanged(result);
 }
 
 void DapCommandController::processGetHistory()
 {
     DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    QVariant result = reply->response().result().toArray().toVariantList();
+    QVariant result = reply->response().toJsonValue().toArray().toVariantList();
     emit sendHistory(result);
 }
 
 void DapCommandController::processResponseConsole()
 {
     DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    QString result = reply->response().result().toVariant().toString();
+    QString result = reply->response().toJsonValue().toVariant().toString();
     emit responseConsole(result);
 }
 
 void DapCommandController::processGetCmdHistory()
 {
     DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    QString result = reply->response().result().toVariant().toString();
+    QString result = reply->response().toJsonValue().toVariant().toString();
     emit sigCmdHistory(result);
 }
 
diff --git a/DapRPCProtocol/DapRpcLocalServer.cpp b/DapRPCProtocol/DapRpcLocalServer.cpp
index 11a2e842352b3a1d14409ad41abfd1e5ad0505ba..bb1b65b3a607dd2d1e622f6aee24c60775f274db 100644
--- a/DapRPCProtocol/DapRpcLocalServer.cpp
+++ b/DapRPCProtocol/DapRpcLocalServer.cpp
@@ -21,7 +21,7 @@ DapRpcLocalServer::~DapRpcLocalServer()
 
 bool DapRpcLocalServer::listen(const QString &asAddress, quint16 aPort)
 {
-    Q_UNUSED(aPort);
+    Q_UNUSED(aPort)
 
     return QLocalServer::listen(asAddress);
 }
diff --git a/DapRPCProtocol/DapRpcMessage.cpp b/DapRPCProtocol/DapRpcMessage.cpp
index d07901ba323cb17da89f438a5c3adb773e5216e8..a2a835937a4d58cc4614b05cfc73b67a2ad77ad5 100644
--- a/DapRPCProtocol/DapRpcMessage.cpp
+++ b/DapRPCProtocol/DapRpcMessage.cpp
@@ -204,6 +204,12 @@ DapRpcMessage DapRpcMessage::createRequest(const QString &asMethod,
     return request;
 }
 
+DapRpcMessage DapRpcMessage::createRequest(const QString& asMethod, const QByteArray& aStream)
+{
+    DapRpcMessage request = createRequest(asMethod, QJsonValue::fromVariant(aStream));
+    return request;
+}
+
 DapRpcMessage DapRpcMessage::createNotification(const QString &asMethod, const QJsonArray &aParams)
 {
     DapRpcMessage notification = DapRpcMessagePrivate::createBasicRequest(asMethod, aParams);
@@ -227,6 +233,12 @@ DapRpcMessage DapRpcMessage::createNotification(const QString &asMethod,
     return notification;
 }
 
+DapRpcMessage DapRpcMessage::createNotification(const QString& asMethod, const QByteArray& aStream)
+{
+    DapRpcMessage notification = createNotification(asMethod, QJsonValue::fromVariant(aStream));
+    return notification;
+}
+
 DapRpcMessage DapRpcMessage::createResponse(const QJsonValue &aResult) const
 {
     DapRpcMessage response;
@@ -293,7 +305,7 @@ QJsonValue DapRpcMessage::params() const
     return d->m_pObject->value(QLatin1String("params"));
 }
 
-QJsonValue DapRpcMessage::result() const
+QJsonValue DapRpcMessage::toJsonValue() const
 {
     if (d->m_type != DapRpcMessage::Response || !d->m_pObject)
         return QJsonValue(QJsonValue::Undefined);
@@ -301,6 +313,12 @@ QJsonValue DapRpcMessage::result() const
     return d->m_pObject->value(QLatin1String("result"));
 }
 
+QByteArray DapRpcMessage::toByteArray() const
+{
+    QJsonValue value = toJsonValue();
+    return QByteArray::fromHex(value.toVariant().toByteArray());
+}
+
 int DapRpcMessage::errorCode() const
 {
     if (d->m_type != DapRpcMessage::Error || !d->m_pObject)
@@ -362,7 +380,7 @@ QDebug operator<<(QDebug dbg, const DapRpcMessage &msg)
         dbg.nospace() << ", method=" << msg.method()
                       << ", params=" << msg.params();
     } else if (msg.type() == DapRpcMessage::Response) {
-        dbg.nospace() << ", result=" << msg.result();
+        dbg.nospace() << ", result=" << msg.toJsonValue();
     } else if (msg.type() == DapRpcMessage::Error) {
         dbg.nospace() << ", code=" << msg.errorCode()
                       << ", message=" << msg.errorMessage()
diff --git a/DapRPCProtocol/DapRpcMessage.h b/DapRPCProtocol/DapRpcMessage.h
index 92b47aaa6648a9b84b656d7c621efb163c61cb77..489ae5787eb3a3894d65c2460eac5fbb0849f721 100644
--- a/DapRPCProtocol/DapRpcMessage.h
+++ b/DapRPCProtocol/DapRpcMessage.h
@@ -47,16 +47,15 @@ public:
         Error
     };
 
-    static DapRpcMessage createRequest(const QString &asMethod,
-                                         const QJsonArray &aParams = QJsonArray());
+    static DapRpcMessage createRequest(const QString &asMethod, const QJsonArray &aParams = QJsonArray());
     static DapRpcMessage createRequest(const QString &asMethod, const QJsonValue &aParam);
     static DapRpcMessage createRequest(const QString &asMethod, const QJsonObject &aNamedParameters);
+    static DapRpcMessage createRequest(const QString &asMethod, const QByteArray& aStream);
 
-    static DapRpcMessage createNotification(const QString &asMethod,
-                                              const QJsonArray &aParams = QJsonArray());
+    static DapRpcMessage createNotification(const QString &asMethod, const QJsonArray &aParams = QJsonArray());
     static DapRpcMessage createNotification(const QString &asMethod, const QJsonValue &aParam);
-    static DapRpcMessage createNotification(const QString &asMethod,
-                                              const QJsonObject &aNamedParameters);
+    static DapRpcMessage createNotification(const QString &asMethod, const QJsonObject &aNamedParameters);
+    static DapRpcMessage createNotification(const QString &asMethod, const QByteArray& aStream);
 
     DapRpcMessage createResponse(const QJsonValue &aResult) const;
     DapRpcMessage createErrorResponse(DapErrorCode aCode,
@@ -72,7 +71,8 @@ public:
     QJsonValue params() const;
 
     // response
-    QJsonValue result() const;
+    QJsonValue toJsonValue() const;
+    QByteArray toByteArray() const;
 
     // error
     int errorCode() const;
diff --git a/DapRPCProtocol/DapRpcService.cpp b/DapRPCProtocol/DapRpcService.cpp
index 7159d4acc52112f43e4bf40e61e473511ea995bd..6c37bbf190d11d8dbb931e0f8ce77924a7fb62f3 100644
--- a/DapRPCProtocol/DapRpcService.cpp
+++ b/DapRPCProtocol/DapRpcService.cpp
@@ -100,12 +100,12 @@ int DapRpcService::convertVariantTypeToJSType(int aType)
         return QJsonValue::Array;
     case QMetaType::QVariantMap:
         return QJsonValue::Object;
+    case QMetaType::QByteArray:
     case QMetaType::QString:
         return QJsonValue::String;
     case QMetaType::Bool:
         return QJsonValue::Bool;
-    default:
-        break;
+    default: break;
     }
 
     return QJsonValue::Undefined;
@@ -217,7 +217,7 @@ QJsonValue DapRpcService::convertReturnValue(QVariant &aReturnValue)
     else if (static_cast<int>(aReturnValue.type()) == qMetaTypeId<QJsonArray>())
         return QJsonValue(aReturnValue.toJsonArray());
 
-    switch (aReturnValue.type()) {
+    switch (static_cast<QMetaType::Type>(aReturnValue.type())) {
     case QMetaType::Bool:
     case QMetaType::Int:
     case QMetaType::Double:
@@ -229,6 +229,8 @@ QJsonValue DapRpcService::convertReturnValue(QVariant &aReturnValue)
     case QMetaType::QVariantList:
     case QMetaType::QVariantMap:
         return QJsonValue::fromVariant(aReturnValue);
+    case QMetaType::QByteArray:
+        return QJsonValue::fromVariant(aReturnValue.toByteArray().toHex());
     default:
         // if a conversion operator was registered it will be used
         if (aReturnValue.convert(QMetaType::QJsonValue))
diff --git a/DapRPCProtocol/DapRpcServiceProvider.cpp b/DapRPCProtocol/DapRpcServiceProvider.cpp
index 106e9fe61c693f896dc18f60d03362a22406ecd6..71168a8f88a8555a50a78379292923cc9a04c172 100644
--- a/DapRPCProtocol/DapRpcServiceProvider.cpp
+++ b/DapRPCProtocol/DapRpcServiceProvider.cpp
@@ -89,5 +89,5 @@ void DapRpcServiceProvider::processMessage(DapRpcSocket *apSocket, const DapRpcM
             apSocket->notify(error);
             break;
         }
-    };
+    }
 }