diff --git a/CellFrameDashboardGUI/DapCommandController.cpp b/CellFrameDashboardGUI/DapCommandController.cpp
index 2942f0c90fcd3d8b6e4931a929b0475b36a77004..d3673baf44bd73efcb12fd385b1b91488ee7a229 100755
--- a/CellFrameDashboardGUI/DapCommandController.cpp
+++ b/CellFrameDashboardGUI/DapCommandController.cpp
@@ -51,6 +51,7 @@ void DapCommandController::getHistory()
 {
     DapRpcServiceReply *reply = m_DAPRpcSocket->invokeRemoteMethod("RPCServer.getHistory");
     connect(reply, SIGNAL(finished()), this, SLOT(processGetHistory()));
+
 }
 
 void DapCommandController::setNewHistory(const QVariant& aData)
@@ -70,6 +71,12 @@ void DapCommandController::getCmdHistory()
     connect(reply, SIGNAL(finished()), this, SLOT(processGetCmdHistory()));
 }
 
+void DapCommandController::getTest()
+{
+    DapRpcServiceReply *reply = m_DAPRpcSocket->invokeRemoteMethod("RPCServer.getTest");
+    connect(reply, SIGNAL(finished()), this, SLOT(processGetTest()));
+}
+
 void DapCommandController::processChangedLog()
 {
 //    QStringList tempLogModel;
@@ -213,6 +220,14 @@ void DapCommandController::processGetCmdHistory()
     emit sigCmdHistory(result);
 }
 
+void DapCommandController::processGetTest()
+{
+    qDebug() << "!!!!!!!!processGetTest!!!!!!!!!!";
+    DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
+    QByteArray result = reply->response().result().toVariant().toByteArray();
+    qDebug() << result;
+}
+
 /// Show or hide GUI client by clicking on the tray icon.
 /// @param aIsActivated Accepts true - when requesting to 
 /// display a client, falso - when requesting to hide a client.
@@ -251,6 +266,8 @@ void DapCommandController::getWallets()
 {
     DapRpcServiceReply *reply = m_DAPRpcSocket->invokeRemoteMethod("RPCServer.getWallets");
     connect(reply, SIGNAL(finished()), this, SLOT(processGetWallets()));
+    getTest();
+
 }
 
 void DapCommandController::getWalletInfo(const QString& asWalletName)
diff --git a/CellFrameDashboardGUI/DapCommandController.h b/CellFrameDashboardGUI/DapCommandController.h
index 845f95cc6dcfa40ff641855cf38a691e9d2dbc14..2f6e3f0c53885f0d22d1cfe9f2eb8c916c771540 100755
--- a/CellFrameDashboardGUI/DapCommandController.h
+++ b/CellFrameDashboardGUI/DapCommandController.h
@@ -84,6 +84,8 @@ private slots:
 
     void processGetCmdHistory();
 
+    void processGetTest();
+
 public slots:
     /// Show or hide GUI client by clicking on the tray icon.
     /// @param aIsActivated Accepts true - when requesting to 
@@ -119,6 +121,8 @@ public slots:
     void requestConsole(const QString& aQueue);
     /// Get command history
     void getCmdHistory();
+
+    void getTest();
 };
 
 #endif // COMMANDCONTROLLER_H
diff --git a/CellFrameDashboardService/DapChainDashboardService.cpp b/CellFrameDashboardService/DapChainDashboardService.cpp
index fa588c86d31fdea955cfc147158a416fe31ef956..c98290f3eb7e9581962c9e20a2a82c81c799d7c3 100755
--- a/CellFrameDashboardService/DapChainDashboardService.cpp
+++ b/CellFrameDashboardService/DapChainDashboardService.cpp
@@ -100,6 +100,20 @@ QString DapChainDashboardService::getCmdHistory() const
     return m_pDapChainConsoleHandler->getHistory();
 }
 
+QByteArray DapChainDashboardService::getTest() const
+{
+    QByteArray data;
+    QDataStream out(&data, QIODevice::WriteOnly);
+
+    DapNodeData nodeData;
+    nodeData.Cell = 1;
+    nodeData.Ipv4 = "mua";
+
+    out << nodeData;
+
+    return data;
+}
+
 void DapChainDashboardService::doRequestWallets()
 {
     m_pDapChainHistoryHandler->onRequestNewHistory(m_pDapChainWalletHandler->getWallets());
diff --git a/CellFrameDashboardService/DapChainDashboardService.h b/CellFrameDashboardService/DapChainDashboardService.h
index 6f1fe70bd889d4961539e7aa20bc625bab2718b6..6844f6073d2e1050765ad9ace51a2f6b5e730d22 100755
--- a/CellFrameDashboardService/DapChainDashboardService.h
+++ b/CellFrameDashboardService/DapChainDashboardService.h
@@ -111,6 +111,8 @@ public slots:
     /// @return history of last 50 commands
     QString getCmdHistory() const;
 
+    QByteArray getTest() const;
+
 private slots:
     void doRequestWallets();
     void doSendNewHistory(const QVariant& aData);
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..43aba8e7b51eb17277a5af5046154384ed055e27 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;
diff --git a/DapRPCProtocol/DapRpcMessage.h b/DapRPCProtocol/DapRpcMessage.h
index 92b47aaa6648a9b84b656d7c621efb163c61cb77..dc3164b4014f4bd23e0fdcdf081f45a5cd1a6030 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,
diff --git a/DapRPCProtocol/DapRpcService.cpp b/DapRPCProtocol/DapRpcService.cpp
index 7159d4acc52112f43e4bf40e61e473511ea995bd..34aad0f9c2b8614913e692e4a7cb823860a43456 100644
--- a/DapRPCProtocol/DapRpcService.cpp
+++ b/DapRPCProtocol/DapRpcService.cpp
@@ -93,19 +93,14 @@ int DapRpcService::convertVariantTypeToJSType(int aType)
     case QMetaType::ULongLong:
     case QMetaType::UShort:
     case QMetaType::UChar:
-    case QMetaType::Float:
-        return QJsonValue::Double;    // all numeric types in js are doubles
+        case QMetaType::QByteArray:
+    case QMetaType::Float: return QJsonValue::Double;    // all numeric types in js are doubles
     case QMetaType::QVariantList:
-    case QMetaType::QStringList:
-        return QJsonValue::Array;
-    case QMetaType::QVariantMap:
-        return QJsonValue::Object;
-    case QMetaType::QString:
-        return QJsonValue::String;
-    case QMetaType::Bool:
-        return QJsonValue::Bool;
-    default:
-        break;
+    case QMetaType::QStringList: return QJsonValue::Array;
+    case QMetaType::QVariantMap: return QJsonValue::Object;
+    case QMetaType::QString: return QJsonValue::String;
+    case QMetaType::Bool: return QJsonValue::Bool;
+    default: break;
     }
 
     return QJsonValue::Undefined;
@@ -217,7 +212,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:
@@ -228,6 +223,7 @@ QJsonValue DapRpcService::convertReturnValue(QVariant &aReturnValue)
     case QMetaType::QStringList:
     case QMetaType::QVariantList:
     case QMetaType::QVariantMap:
+    case QMetaType::QByteArray:
         return QJsonValue::fromVariant(aReturnValue);
     default:
         // if a conversion operator was registered it will be used