diff --git a/CellFrameDashboardGUI/DapServiceController.h b/CellFrameDashboardGUI/DapServiceController.h
index fc2f6586cdf34a47a4ece83693538c2740c5e7dd..90288f3552c0e408e8f689110cecd59bdd1ac051 100644
--- a/CellFrameDashboardGUI/DapServiceController.h
+++ b/CellFrameDashboardGUI/DapServiceController.h
@@ -7,6 +7,7 @@
 #include <QJSEngine>
 #include <QVector>
 #include <algorithm>
+#include <QDataStream>
 
 #include "DapServiceClient.h"
 #include "Handlers/DapAbstractCommand.h"
@@ -15,6 +16,7 @@
 #include "Handlers/DapUpdateLogsCommand.h"
 #include "Handlers/DapAddWalletCommand.h"
 #include "Handlers/DapGetListWalletsCommand.h"
+#include "DapWallet.h"
 
 class DapServiceController : public QObject
 {
diff --git a/CellFrameDashboardGUI/main.cpp b/CellFrameDashboardGUI/main.cpp
index 6112b12ef6eeafdb3ad864c5edd3bf38610393cb..3784484798731e5548ae77dcc42276cd9caf0e64 100644
--- a/CellFrameDashboardGUI/main.cpp
+++ b/CellFrameDashboardGUI/main.cpp
@@ -40,13 +40,17 @@ int main(int argc, char *argv[])
     #endif
 //#endif
 
+     qRegisterMetaType<DapWallet>();
+
     /// Local client.
     DapServiceClient dapServiceClient;
     // Creating a service controller
     DapServiceController &controller = DapServiceController::getInstance();
     controller.init(&dapServiceClient);
     dapServiceClient.init();
-    qmlRegisterType<DapLogMessage>("LogMessage", 1, 0, "DapLogMessage");
+    qmlRegisterType<DapLogMessage>("Demlabs", 1, 0, "DapLogMessage");
+    qmlRegisterType<DapWallet>("Demlabs", 1, 0, "DapWallet");
+    qmlRegisterType<DapWalletToken>("Demlabs", 1, 0, "DapWalletToken");
 
     QQmlApplicationEngine engine;
     engine.rootContext()->setContextProperty("dapServiceController", &DapServiceController::getInstance());
diff --git a/CellFrameDashboardGUI/screen/desktop/Dashboard/DapDashboardTopPanel.qml b/CellFrameDashboardGUI/screen/desktop/Dashboard/DapDashboardTopPanel.qml
index 7f84bb6b5409b8828027feb44c453d8bf4bd4308..485ee280ff5edb56c2c3939adf4abc40cf21f0d8 100644
--- a/CellFrameDashboardGUI/screen/desktop/Dashboard/DapDashboardTopPanel.qml
+++ b/CellFrameDashboardGUI/screen/desktop/Dashboard/DapDashboardTopPanel.qml
@@ -1,7 +1,14 @@
 import QtQuick 2.4
+import Demlabs 1.0
 
 DapDashboardTopPanelForm 
 {
+    DapWallet
+    {
+        id: wal
+    }
+
+    property var objectsArray: []
     ListModel 
     {
         id: modelWallets
@@ -17,12 +24,21 @@ DapDashboardTopPanelForm
             else
                 console.log(wallet[1])
         }
+        onWalletsListReceived:
+        {
+            objectsArray.push(wal.fromVariant(wallet))
+            for (var i = 0; i < objectsArray.length; ++i)
+            {
+//                var str = objectsArray[i].Name + objectsArray[i].Networks + objectsArray[i].getTokens("private").Balance + "\n"
+                modelWallets.append({ "name" : objectsArray[i].Name})
+            }
+        }
     }
     
-    function updateModel(wallet)
+    function updateModel(nameWallet)
     {
-        console.log(wallet[2])
-        modelWallets.append({ "name" : wallet[1]})
+        console.log(nameWallet)
+        modelWallets.append({ "name" : nameWallet})
     }
 
     dapAddWalletButton.onClicked: 
diff --git a/libCellFrameDashboardCommon/DapWallet.cpp b/libCellFrameDashboardCommon/DapWallet.cpp
index 52c5904907bc3767904a09e6356199c5464e4eef..d29cfc78696e70c736ca119c3a277dcce440b569 100644
--- a/libCellFrameDashboardCommon/DapWallet.cpp
+++ b/libCellFrameDashboardCommon/DapWallet.cpp
@@ -1,34 +1,63 @@
 #include "DapWallet.h"
 
-DapWallet::DapWallet(const QString &asName)
-    : m_name(asName)
+DapWallet::DapWallet(const QString &asName, QObject * parent)
+    : QObject(parent), m_sName(asName)
 {
 
 }
 
+DapWallet::DapWallet(const DapWallet &aToken)
+    : QObject(parent()), m_sName(aToken.m_sName), m_aNetworks(aToken.m_aNetworks),
+       m_aAddress(aToken.m_aAddress), m_aTokens(aToken.m_aTokens)
+{
+
+}
+
+DapWallet &DapWallet::operator=(const DapWallet &aToken)
+{
+    QObject(parent());
+    m_sName = aToken.m_sName;
+    m_aNetworks = aToken.m_aNetworks;
+    m_aAddress = aToken.m_aAddress;
+    m_aTokens = aToken.m_aTokens;
+    return (*this);
+}
+
+QString DapWallet::getName() const
+{
+    return m_sName;
+}
+
+void DapWallet::setName(const QString &sName)
+{
+    m_sName = sName;
+
+    emit nameChanged(m_sName);
+}
+
 void DapWallet::addNetwork(const QString &asNetwork)
 {
-    m_networks.append(asNetwork);
+    m_aNetworks.append(asNetwork);
 }
 
 QList<QString> &DapWallet::getNetworks()
 {
-    return m_networks;
+    return m_aNetworks;
 }
 
 void DapWallet::setAddress(const QString& aiAddress, const QString &asNetwork)
 {
-    m_iAddress.insert(asNetwork, aiAddress);
+    m_aAddress.insert(asNetwork, aiAddress);
 }
 
 QString DapWallet::getAddress(const QString &asNetwork)
 {
-    return m_iAddress.find(asNetwork).value();
+    return m_aAddress.find(asNetwork).value();
 }
 
-void DapWallet::addToken(const DapWalletToken &aToken, const QString &asNetwork)
+void DapWallet::addToken(DapWalletToken aToken)
 {
-    m_aTokens.insert(asNetwork, aToken);
+    m_aTokens.append(aToken);
 }
 
 QList<DapWalletToken *> DapWallet::getTokens(const QString &asNetwork)
@@ -38,10 +67,37 @@ QList<DapWalletToken *> DapWallet::getTokens(const QString &asNetwork)
     auto end = m_aTokens.end();
     for(;begin != end; ++begin)
     {
-        if(begin.key() == asNetwork)
+        if(begin->getNetwork() == asNetwork)
         {
-            tokens.append(&begin.value());
+            tokens.append(&(*begin));
         }
     }
     return tokens;
 }
+
+QObject* DapWallet::fromVariant(const QVariant &aWallet)
+{
+    DapWallet * wallet = new DapWallet();
+    QByteArray data = QByteArray::fromStdString(aWallet.toString().toStdString());
+    QDataStream in(&data, QIODevice::ReadOnly);
+    in >> *wallet;
+    return wallet;
+}
+
+QDataStream& operator << (QDataStream& aOut, const DapWallet& aWallet)
+{
+    aOut << aWallet.m_sName
+         << aWallet.m_aNetworks
+         << aWallet.m_aAddress
+         << aWallet.m_aTokens;
+    return aOut;
+}
+
+QDataStream& operator >> (QDataStream& aOut, DapWallet& aWallet)
+{
+    aOut >> aWallet.m_sName
+         >> aWallet.m_aNetworks
+         >> aWallet.m_aAddress
+         >> aWallet.m_aTokens;
+    return aOut;
+}
diff --git a/libCellFrameDashboardCommon/DapWallet.h b/libCellFrameDashboardCommon/DapWallet.h
index faabd3765071b99d013da38556821b28006a5145..88a19ac517803ffe34a3ca39fb5e27c078243b01 100644
--- a/libCellFrameDashboardCommon/DapWallet.h
+++ b/libCellFrameDashboardCommon/DapWallet.h
@@ -1,30 +1,56 @@
 #ifndef DAPWALLET_H
 #define DAPWALLET_H
 
+#include <QObject>
 #include <QString>
 #include <QList>
+#include <QQmlEngine>
 
 #include "DapWalletToken.h"
 
-class DapWallet
+class DapWallet : public QObject
 {
-    QString         m_name;
-    QList<QString>  m_networks;
-    QMap<QString, QString>   m_iAddress;
-    QMultiMap<QString, DapWalletToken>   m_aTokens;
+    Q_OBJECT
+
+    QString         m_sName;
+    QList<QString>  m_aNetworks;
+    QMap<QString, QString>   m_aAddress;
+    QList<DapWalletToken>   m_aTokens;
 
 public:
-    DapWallet(const QString& asName);
+    Q_INVOKABLE explicit DapWallet(const QString& asName = QString(), QObject * parent = nullptr);
+    Q_INVOKABLE DapWallet(const DapWallet& aToken);
+    Q_INVOKABLE DapWallet& operator=(const DapWallet& aToken);
+
+    Q_PROPERTY(QString Name MEMBER m_sName READ getName WRITE setName NOTIFY nameChanged)
+    Q_PROPERTY(QList<QString> Networks MEMBER m_aNetworks READ getNetworks NOTIFY networkAdded)
+
+
+    friend QDataStream& operator << (QDataStream& aOut, const DapWallet& aToken);
+    friend QDataStream& operator >> (QDataStream& aOut, DapWallet& aToken);
+
+    Q_INVOKABLE QObject* fromVariant(const QVariant& aWallet);
 
+signals:
+    void nameChanged(const QString& asName);
+    void networkAdded(const QString& asName);
+
+public slots:
+
+    QString getName() const;
+    void setName(const QString &sName);
     void addNetwork(const QString& asNetwork);
     QList<QString>& getNetworks();
     void setAddress(const QString &aiAddress, const QString& asNetwork);
     QString getAddress(const QString& asNetwork);
-    void addToken(const DapWalletToken& asName, const QString& asNetwork);
+    void addToken(DapWalletToken asName);
     QList<DapWalletToken*> getTokens(const QString& asNetwork);
 
 
 
 };
 
+Q_DECLARE_METATYPE(DapWallet)
+
+
 #endif // DAPWALLET_H
diff --git a/libCellFrameDashboardCommon/DapWalletToken.cpp b/libCellFrameDashboardCommon/DapWalletToken.cpp
index 04b2def43cd05c482a5e5fe74f316fced6ea37c1..3298206e1e33ecbdde71873363df89d6ec05d35d 100644
--- a/libCellFrameDashboardCommon/DapWalletToken.cpp
+++ b/libCellFrameDashboardCommon/DapWalletToken.cpp
@@ -1,7 +1,108 @@
 #include "DapWalletToken.h"
 
-DapWalletToken::DapWalletToken(const QString &asName)
-    : m_sName(asName)
+DapWalletToken::DapWalletToken(const QString &asName, QObject *parent)
+    : QObject(parent), m_sName(asName)
 {
 
 }
+
+DapWalletToken::DapWalletToken(const DapWalletToken &aToken)
+    : QObject(aToken.parent()), m_sName(aToken.m_sName), m_dBalance(aToken.m_dBalance),
+      m_iEmission(aToken.m_iEmission), m_sNetwork(aToken.m_sNetwork)
+{
+
+}
+
+DapWalletToken &DapWalletToken::operator=(const DapWalletToken &aToken)
+{
+    QObject(parent());
+    m_sName = aToken.m_sName;
+    m_dBalance = aToken.m_dBalance;
+    m_iEmission = aToken.m_iEmission;
+    m_sNetwork = aToken.m_sNetwork;
+    return (*this);
+}
+
+bool DapWalletToken::operator==(const DapWalletToken &aToken) const
+{
+    return m_sName == aToken.m_sName
+         && m_dBalance == aToken.m_dBalance
+         && m_iEmission == aToken.m_iEmission
+         && m_sNetwork == aToken.m_sNetwork;
+}
+
+QString DapWalletToken::getName() const
+{
+    return m_sName;
+}
+
+void DapWalletToken::setName(const QString &sName)
+{
+    m_sName = sName;
+
+    emit nameChanged(m_sName);
+}
+
+double DapWalletToken::getBalance() const
+{
+    return m_dBalance;
+}
+
+void DapWalletToken::setBalance(double dBalance)
+{
+    m_dBalance = dBalance;
+
+    emit balanceChanged(m_dBalance);
+}
+
+quint64 DapWalletToken::getEmission() const
+{
+    return m_iEmission;
+}
+
+void DapWalletToken::setEmission(const quint64 &iEmission)
+{
+    m_iEmission = iEmission;
+
+    emit emissionChanged(m_iEmission);
+}
+
+QString DapWalletToken::getNetwork() const
+{
+    return m_sNetwork;
+}
+
+void DapWalletToken::setNetwork(const QString &sNetwork)
+{
+    m_sNetwork = sNetwork;
+
+    emit networkChanged(m_sNetwork);
+}
+
+QDataStream& operator << (QDataStream& aOut, const DapWalletToken& aToken)
+{
+    QString balance;
+    balance.setNum(aToken.m_dBalance);
+    QString emission;
+    emission.setNum(aToken.m_iEmission);
+    aOut << aToken.m_sName
+         << balance
+         << emission
+         << aToken.m_sNetwork;
+    return aOut;
+}
+
+QDataStream& operator >> (QDataStream& aOut, DapWalletToken& aToken)
+{
+    QString balance;
+    QString emission;
+    aOut >> aToken.m_sName
+         >> balance
+         >> emission
+         >> aToken.m_sNetwork;
+    aToken.m_dBalance = balance.toDouble();
+    aToken.m_iEmission = emission.toULongLong();
+    return aOut;
+}
+
+
diff --git a/libCellFrameDashboardCommon/DapWalletToken.h b/libCellFrameDashboardCommon/DapWalletToken.h
index 99eb2704ea22a2d4d17af10791b7d05faf1aa5ee..92e9e6d7d5af5be9d0d2e02cc260a8a91716afe9 100644
--- a/libCellFrameDashboardCommon/DapWalletToken.h
+++ b/libCellFrameDashboardCommon/DapWalletToken.h
@@ -1,10 +1,14 @@
 #ifndef DAPWALLETTOKEN_H
 #define DAPWALLETTOKEN_H
 
+#include <QObject>
 #include <QString>
+#include <QDataStream>
 
-struct DapWalletToken
+class DapWalletToken : public QObject
 {
+    Q_OBJECT
+
     /// Token name.
     QString m_sName;
     /// Token balance.
@@ -15,7 +19,37 @@ struct DapWalletToken
     QString m_sNetwork;
 
 public:
-    explicit DapWalletToken(const QString& asName = QString());
+    explicit DapWalletToken(const QString& asName = QString(), QObject *parent = nullptr);
+    DapWalletToken(const DapWalletToken& aToken);
+    DapWalletToken& operator=(const DapWalletToken& aToken);
+    bool operator==(const DapWalletToken& aToken) const;
+
+    Q_PROPERTY(QString Name MEMBER m_sName READ getName WRITE setName NOTIFY nameChanged)
+    Q_PROPERTY(double Balance MEMBER m_dBalance READ getBalance WRITE setBalance NOTIFY balanceChanged)
+    Q_PROPERTY(quint64 Emission MEMBER m_iEmission READ getEmission WRITE setEmission NOTIFY emissionChanged)
+    Q_PROPERTY(QString Network MEMBER m_sNetwork READ getNetwork WRITE setNetwork NOTIFY networkChanged)
+
+
+    friend QDataStream& operator << (QDataStream& aOut, const DapWalletToken& aToken);
+    friend QDataStream& operator >> (QDataStream& aOut, DapWalletToken& aToken);
+
+signals:
+    void nameChanged(const QString & asName);
+    void balanceChanged(const double & adBalance);
+    void emissionChanged(const qint64& aiEmission);
+    void networkChanged(const QString &asNetwork);
+
+public slots:
+    QString getName() const;
+    void setName(const QString &sName);
+    double getBalance() const;
+    void setBalance(double dBalance);
+    quint64 getEmission() const;
+    void setEmission(const quint64 &iEmission);
+    QString getNetwork() const;
+    void setNetwork(const QString &sNetwork);
 };
 
+Q_DECLARE_METATYPE(DapWalletToken)
+
 #endif // DAPWALLETTOKEN_H
diff --git a/libCellFrameDashboardCommon/Handlers/DapGetListWalletsCommand.cpp b/libCellFrameDashboardCommon/Handlers/DapGetListWalletsCommand.cpp
index 58a60b1606d6ed8322c3775d5cf403a79c9f8655..65e3211e4b3a406fabda00a6c0dc96b08fade8da 100644
--- a/libCellFrameDashboardCommon/Handlers/DapGetListWalletsCommand.cpp
+++ b/libCellFrameDashboardCommon/Handlers/DapGetListWalletsCommand.cpp
@@ -21,8 +21,8 @@ QVariant DapGetListWalletsCommand::respondToClient(const QVariant &arg1, const Q
 {
     Q_UNUSED(arg1)
     Q_UNUSED(arg2)
+    Q_UNUSED(arg3)
     Q_UNUSED(arg4)
-    Q_UNUSED(arg8)
     Q_UNUSED(arg5)
     Q_UNUSED(arg6)
     Q_UNUSED(arg7)
@@ -30,63 +30,90 @@ QVariant DapGetListWalletsCommand::respondToClient(const QVariant &arg1, const Q
     Q_UNUSED(arg9)
     Q_UNUSED(arg10)
 
-    QList<DapWallet> wallets;
+    DapWallet wallet("MyWallet5");
+    wallet.addNetwork("Kelvin-testnet");
+    wallet.addNetwork("Private");
+    wallet.setAddress("ar4th4t4j6tyj7utjk45u654kuj4kl6ui4l54k5lu5u4il5i34l35", "Kelvin-testnet");
+    wallet.setAddress("ar4th4t4j6tyj7utjk45u654kuj4kl6ui4l54k5lu5u4il5i34l35", "Private");
+    DapWalletToken token1("KLV", &wallet);
+    token1.setBalance(5.5);
+    token1.setNetwork("Kelvin-testnet");
+    token1.setEmission(464645646546);
+    DapWalletToken token2("CELL", &wallet);
+    token2.setBalance(100);
+    token2.setNetwork("Private");
+    token2.setEmission(121212121);
+    wallet.addToken(token1);
+    wallet.addToken(token2);
+
+    QByteArray datas;
+    QDataStream out(&datas, QIODevice::WriteOnly);
+    out << wallet;
+//    std::string s = datas.toStdString();
+//    QString str = QString::fromStdString(s);
 
-    QStringList list = arg1.toStringList();
-    QProcess process;
-    process.start(QString("%1 wallet list").arg(CLI_PATH));
-    process.waitForFinished(-1);
-    QString res = QString::fromLatin1(process.readAll());
-    QRegularExpression rx("wallet:\\s(.+)\\s", QRegularExpression::MultilineOption);
-    QRegularExpressionMatchIterator itr = rx.globalMatch(res);
-    while (itr.hasNext())
-    {
-        QRegularExpressionMatch match = itr.next();
-        QString walletName = match.captured(1);
+//    DapWallet w;
+//    QByteArray d;
+//    QDataStream in(&datas, QIODevice::ReadOnly);
+//    in>>w;
 
-        auto begin = list.begin();
-        auto end = list.end();
-        for(; begin != end; ++begin)
-        {
-            DapWallet wallet(walletName);
-            wallet.addNetwork(*begin);
+    return QVariant(QString::fromStdString(datas.toStdString()));
+//    QList<DapWallet> wallets;
 
-            QProcess process_token;
-            process_token.start(QString("%1 wallet info -w %2 -net %3")
-                                .arg(CLI_PATH)
-                                .arg(walletName)
-                                .arg(*begin));
+//    QStringList list = arg1.toStringList();
+//    QProcess process;
+//    process.start(QString("%1 wallet list").arg(CLI_PATH));
+//    process.waitForFinished(-1);
+//    QString res = QString::fromLatin1(process.readAll());
+//    QRegularExpression rx("wallet:\\s(.+)\\s", QRegularExpression::MultilineOption);
+//    QRegularExpressionMatchIterator itr = rx.globalMatch(res);
+//    while (itr.hasNext())
+//    {
+//        QRegularExpressionMatch match = itr.next();
+//        QString walletName = match.captured(1);
 
-            process_token.waitForFinished(-1);
-            QByteArray result_tokens = process_token.readAll();
-            QRegExp regex("wallet: (.+)\\s+addr:\\s+(.+)\\s+(balance)|(\\d+.\\d+)\\s\\((\\d+)\\)\\s(\\w+)");
+//        auto begin = list.begin();
+//        auto end = list.end();
+//        for(; begin != end; ++begin)
+//        {
+//            DapWallet wallet (walletName);
+//            wallet.addNetwork(*begin);
 
-            int pos = 0;
-            while((pos = regex.indexIn(result_tokens, pos)) != -1)
-            {
-                DapWalletToken token;
-                if(!regex.cap(2).isEmpty())
-                {
-                    wallet.setAddress(regex.cap(2), *begin);
-                }
-                else
-                {
+//            QProcess process_token;
+//            process_token.start(QString("%1 wallet info -w %2 -net %3")
+//                                .arg(CLI_PATH)
+//                                .arg(walletName)
+//                                .arg(*begin));
 
-                    token.m_sName = regex.cap(6);
-                    token.m_dBalance = regex.cap(4).toDouble();
-                    token.m_sNetwork = *begin;
-                    token.m_iEmission = regex.cap(5).toUInt();
-                }
+//            process_token.waitForFinished(-1);
+//            QByteArray result_tokens = process_token.readAll();
+//            QRegExp regex("wallet: (.+)\\s+addr:\\s+(.+)\\s+(balance)|(\\d+.\\d+)\\s\\((\\d+)\\)\\s(\\w+)");
 
-                    pos += regex.matchedLength();
-            }
-            wallets.append(wallet);
-        }
-    }
+//            int pos = 0;
+//            while((pos = regex.indexIn(result_tokens, pos)) != -1)
+//            {
+//                DapWalletToken token;
+//                if(!regex.cap(2).isEmpty())
+//                {
+//                    wallet.setAddress(regex.cap(2), *begin);
+//                }
+//                else
+//                {
+
+//                    token.setName(regex.cap(6));
+//                    token.setBalance(regex.cap(4).toDouble());
+//                    token.setEmission(regex.cap(5).toUInt());
+//                    token.setNetwork(*begin);
+//                }
+//                pos += regex.matchedLength();
+//            }
+//            wallets.append(wallet);
+//        }
+//    }
 //    if(m_walletList != walletList)
 //    {
 //        m_walletList = walletList;
 //        emit walletDataChanged(walletData());
 //    }
-    return QVariant();
+//    return QVariant();
 }
diff --git a/libCellFrameDashboardCommon/Handlers/DapGetListWalletsCommand.h b/libCellFrameDashboardCommon/Handlers/DapGetListWalletsCommand.h
index ff75853dee14483918537170d9d1f3d863cbe144..e97d439c196644dd6fbcf93546b0362ce3c36e5c 100644
--- a/libCellFrameDashboardCommon/Handlers/DapGetListWalletsCommand.h
+++ b/libCellFrameDashboardCommon/Handlers/DapGetListWalletsCommand.h
@@ -4,6 +4,9 @@
 #include <QProcess>
 #include <QRegExp>
 #include <QRegularExpression>
+#include <QByteArray>
+#include <QDataStream>
+#include <QBuffer>
 
 #include "DapWallet.h"
 #include "DapAbstractCommand.h"
@@ -26,7 +29,7 @@ public slots:
                              const QVariant &arg3 = QVariant(), const QVariant &arg4 = QVariant(),
                              const QVariant &arg5 = QVariant(), const QVariant &arg6 = QVariant(),
                              const QVariant &arg7 = QVariant(), const QVariant &arg8 = QVariant(),
-                             const QVariant &arg9 = QVariant(), const QVariant &arg10 = QVariant());
+                             const QVariant &arg9 = QVariant(), const QVariant &arg10 = QVariant()) override;
 };
 
 #endif // DAPGETLISTWALLETSCOMMAND_H