diff --git a/KelvinDashboardGUI/DapChainWalletsModel.cpp b/KelvinDashboardGUI/DapChainWalletsModel.cpp
old mode 100644
new mode 100755
index 7d46e1686e74e08ca61b3014e0ed6131cfbe9583..77cc88c4edb4c67f7ced3a33b1ac2ffc3ac4ca46
--- a/KelvinDashboardGUI/DapChainWalletsModel.cpp
+++ b/KelvinDashboardGUI/DapChainWalletsModel.cpp
@@ -24,6 +24,7 @@ QVariant DapChainWalletsModel::data(const QModelIndex &index, int role) const
             case NameWalletRole: return m_dapChainWallets.at(index.row())->getName();
             case AddressWalletRole: return m_dapChainWallets.at(index.row())->getAddress();
             case BalanceWalletRole: return m_dapChainWallets.at(index.row())->getBalance();
+            case TokensWalletRole: return m_dapChainWallets.at(index.row())->getTokens();
             default:
                 return QVariant();
         }
@@ -36,7 +37,8 @@ QHash<int, QByteArray> DapChainWalletsModel::roleNames() const
             { IconWalletRole, "iconPath" },
             { NameWalletRole, "name" },
             { AddressWalletRole, "address" },
-            { BalanceWalletRole, "balance" }
+            { BalanceWalletRole, "balance" },
+            { TokensWalletRole, "tokens" }
         };
 
     return roles;
@@ -45,25 +47,25 @@ QHash<int, QByteArray> DapChainWalletsModel::roleNames() const
 QVariantMap DapChainWalletsModel::get(int row) const
 {
     const DapChainWallet *wallet = m_dapChainWallets.value(row);
-    return { {"iconPath", wallet->getIconPath()}, {"name", wallet->getName()}, {"address", wallet->getAddress()}, {"balance", wallet->getBalance()} };
+    return { {"iconPath", wallet->getIconPath()}, {"name", wallet->getName()}, {"address", wallet->getAddress()}, {"balance", wallet->getBalance()}, {"tokens", wallet->getTokens()} };
 }
 
 void DapChainWalletsModel::append(const DapChainWallet &arWallet)
 {
-    this->append(arWallet.getIconPath(), arWallet.getName(), arWallet.getAddress(), arWallet.getBalance());
+    this->append(arWallet.getIconPath(), arWallet.getName(), arWallet.getAddress(), arWallet.getBalance(), arWallet.getTokens());
 }
 
-void DapChainWalletsModel::append(const QString& asIconPath, const QString &asName, const QString  &asAddress, const QString& aBalance)
+void DapChainWalletsModel::append(const QString& asIconPath, const QString &asName, const QString  &asAddress, const QStringList& aBalance, const QStringList& aTokens)
 {
     int row = 0;
     while (row < m_dapChainWallets.count())
         ++row;
     beginInsertRows(QModelIndex(), row, row);
-    m_dapChainWallets.insert(row, new DapChainWallet(asIconPath, asName, asAddress, aBalance));
+    m_dapChainWallets.insert(row, new DapChainWallet(asIconPath, asName, asAddress, aBalance, aTokens));
     endInsertRows();
 }
 
-void DapChainWalletsModel::set(int row, const QString& asIconPath, const QString &asName, const QString  &asAddresss, const QString& aBalance)
+void DapChainWalletsModel::set(int row, const QString& asIconPath, const QString &asName, const QString  &asAddresss, const QStringList& aBalance, const QStringList& aTokens)
 {
     if (row < 0 || row >= m_dapChainWallets.count())
             return;
@@ -73,6 +75,7 @@ void DapChainWalletsModel::set(int row, const QString& asIconPath, const QString
         wallet->setName(asName);
         wallet->setAddress(asAddresss);
         wallet->setBalance(aBalance);
+        wallet->setTokens(aTokens);
         dataChanged(index(row, 0), index(row, 0), { IconWalletRole, NameWalletRole, AddressWalletRole, BalanceWalletRole });
 }
 
diff --git a/KelvinDashboardGUI/DapChainWalletsModel.h b/KelvinDashboardGUI/DapChainWalletsModel.h
old mode 100644
new mode 100755
index 5c8afb5eeb039cc9bfc5f8ef25fd68645937d9f6..fe59c4adac99aab061f815949863c5dee46e25d5
--- a/KelvinDashboardGUI/DapChainWalletsModel.h
+++ b/KelvinDashboardGUI/DapChainWalletsModel.h
@@ -16,7 +16,8 @@ enum DapChainWalletRole {
         IconWalletRole = Qt::DisplayRole,
         NameWalletRole = Qt::UserRole,
         AddressWalletRole,
-        BalanceWalletRole
+        BalanceWalletRole,
+        TokensWalletRole
     };
 
 class DapChainWalletsModel : public QAbstractListModel
@@ -37,8 +38,8 @@ public:
 
     Q_INVOKABLE QVariantMap get(int row) const;
     Q_INVOKABLE void append(const DapChainWallet &arWallet);
-    Q_INVOKABLE void append(const QString& asIconPath, const QString &asName, const QString  &asAddress, const QString &aBalance);
-    Q_INVOKABLE void set(int row, const QString& asIconPath, const QString &asName, const QString  &asAddresss, const QString &aBalance);
+    Q_INVOKABLE void append(const QString& asIconPath, const QString &asName, const QString  &asAddress, const QStringList &aBalance, const QStringList &aTokens);
+    Q_INVOKABLE void set(int row, const QString& asIconPath, const QString &asName, const QString  &asAddresss, const QStringList &aBalance, const QStringList &aTokens);
     Q_INVOKABLE void remove(int row);
     Q_INVOKABLE void clear();
 
diff --git a/KelvinDashboardGUI/DapCommandController.cpp b/KelvinDashboardGUI/DapCommandController.cpp
old mode 100644
new mode 100755
index 06792c1e4d2ab6ccb5e6db1aec14b809afc041af..182ccb63f44fcb6f334de99f4c1b898ea1655423
--- a/KelvinDashboardGUI/DapCommandController.cpp
+++ b/KelvinDashboardGUI/DapCommandController.cpp
@@ -67,6 +67,19 @@ void DapCommandController::processAddWallet()
     emit sigWalletAdded(name, address);
 }
 
+void DapCommandController::processSendToken()
+{
+    qInfo() << "processSendToken()";
+    DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
+    if (!reply) {
+        qWarning() << "Invalid response received";
+        return;
+    }
+    emit sigCommandResult(reply->response().result());
+    auto answer = reply->response().result().toVariant().toString();
+    emit onTokenSended(answer);
+}
+
 void DapCommandController::processGetWallets()
 {
     qInfo() << "processGetWallets()";
@@ -90,8 +103,26 @@ void DapCommandController::processGetWalletInfo()
     emit sigCommandResult(reply->response().result());
     QString name = reply->response().result().toVariant().toStringList().at(0);
     QString address = reply->response().result().toVariant().toStringList().at(1);
-    QString balance = reply->response().result().toVariant().toStringList().at(2);
-    emit sigWalletInfoChanged(name, address, balance);
+    QStringList temp = reply->response().result().toVariant().toStringList();
+    QStringList tokens;
+    QStringList balance;
+    for(int x{2}; x < temp.count(); x++)
+    {
+        if(x%2)
+        {
+           tokens.append(temp[x]); 
+           qDebug() << "TOKKEN " << temp[x];
+        }
+        else
+        {
+            QString s;
+            s.setNum(x*10);
+            balance.append(temp[x] + s);
+            qDebug() << "BALANCE " << temp[x];
+        }
+    }
+    
+    emit sigWalletInfoChanged(name, address, balance, tokens);
 }
 
 /// Show or hide GUI client by clicking on the tray icon.
@@ -125,6 +156,13 @@ void DapCommandController::addWallet(const QString &asWalletName)
      connect(reply, SIGNAL(finished()), this, SLOT(processAddWallet()));
 }
 
+void DapCommandController::sendToken(const QString &asSendWallet, const QString &asAddressReceiver, const QString &asToken, const double &aAmount)
+{
+    qInfo() << QString("sendToken(%1, %2, %3, %4)").arg(asSendWallet).arg(asAddressReceiver).arg(asToken).arg(aAmount);
+    DapRpcServiceReply *reply = m_DAPRpcSocket->invokeRemoteMethod("RPCServer.sendToken", asSendWallet, asAddressReceiver, asToken, aAmount);
+    connect(reply, SIGNAL(finished()), this, SLOT(processSendToken()));
+}
+
 void DapCommandController::getWallets()
 {
     DapRpcServiceReply *reply = m_DAPRpcSocket->invokeRemoteMethod("RPCServer.getWallets");
diff --git a/KelvinDashboardGUI/DapCommandController.h b/KelvinDashboardGUI/DapCommandController.h
old mode 100644
new mode 100755
index d8e79a61c737e0cd0df80fc4e8544ffb17f203cd..be2a4e33a71a189880adeb0df554a78e5d37f0f5
--- a/KelvinDashboardGUI/DapCommandController.h
+++ b/KelvinDashboardGUI/DapCommandController.h
@@ -27,6 +27,7 @@ signals:
     void sigNodeLogsReceived(const QStringList& aNodeLogs);
 
     void sigWalletAdded(const QString& asWalletName, const QString& asWalletAddress);
+    void onTokenSended(const QString& asAnswer);
 
     void sigWalletsReceived(const QMap<QString, QVariant>& aWallets);
     /// The signal is emitted when the main application window is activated.
@@ -34,7 +35,7 @@ signals:
     
     void onClientClose();
 
-    void sigWalletInfoChanged(const QString& asWalletName, const QString& asWalletAddress, const QString& aBalance);
+    void sigWalletInfoChanged(const QString& asWalletName, const QString& asWalletAddress, const QStringList& aBalance, const QStringList& aTokens);
     
 public:
     /// Overloaded constructor.
@@ -52,7 +53,7 @@ private slots:
     void processGetNodeLogs();
 
     void processAddWallet();
-
+    void processSendToken();
     void processGetWallets();
 
     void processGetWalletInfo();
@@ -70,6 +71,7 @@ public slots:
     void getNodeLogs(int aiTimeStamp, int aiRowCount);
 
     void addWallet(const QString& asWalletName);
+    void sendToken(const QString &asSendWallet, const QString& asAddressReceiver, const QString& asToken, const double& aAmount);
 
     void getWallets();
 
diff --git a/KelvinDashboardGUI/DapServiceController.cpp b/KelvinDashboardGUI/DapServiceController.cpp
old mode 100644
new mode 100755
index 91c330c05b116d85f9353d60ee5cda9498f3b8b0..cbbd01794dab29b7b2aed082e3140f3c94ff788b
--- a/KelvinDashboardGUI/DapServiceController.cpp
+++ b/KelvinDashboardGUI/DapServiceController.cpp
@@ -44,7 +44,9 @@ void DapServiceController::init(DapServiceClient *apDapServiceClient)
 
     connect(m_pDapCommandController, SIGNAL(sigWalletsReceived(QMap<QString,QVariant>)), SLOT(processGetWallets(QMap<QString,QVariant>)));
 
-    connect(m_pDapCommandController, SIGNAL(sigWalletInfoChanged(QString,QString,QString)), SLOT(processGetWalletInfo(QString,QString,QString)));
+    connect(m_pDapCommandController, SIGNAL(sigWalletInfoChanged(QString,QString, QStringList, QStringList)), SLOT(processGetWalletInfo(QString,QString, QStringList, QStringList)));
+
+    connect(m_pDapCommandController, SIGNAL(onTokenSended(QString)), SLOT(processSendToken(QString)));
 }
 
 QString DapServiceController::getBrand() const
@@ -118,6 +120,12 @@ void DapServiceController::addWallet(const QString &asWalletName)
     m_pDapCommandController->addWallet(asWalletName);
 }
 
+void DapServiceController::sendToken(const QString &asSendWallet, const QString &asAddressReceiver, const QString &asToken, const double &aAmount)
+{
+    qInfo() << QString("sendToken(%1, %2, %3, %4)").arg(asSendWallet).arg(asAddressReceiver).arg(asToken).arg(aAmount);
+    m_pDapCommandController->sendToken(asSendWallet, asAddressReceiver, asToken, aAmount);
+}
+
 void DapServiceController::getWalletInfo(const QString &asWalletName)
 {
     qInfo() << QString("getWalletInfo(%1)").arg(asWalletName);
@@ -126,26 +134,34 @@ void DapServiceController::getWalletInfo(const QString &asWalletName)
 
 void DapServiceController::processAddWallet(const QString& asWalletName, const QString& asWalletAddress)
 {
-    qInfo() << QString("processAddWallet(%1, %2)").arg(asWalletName).arg(asWalletAddress);;
+    qInfo() << QString("processAddWallet(%1, %2)").arg(asWalletName).arg(asWalletAddress);
     DapChainWallet wallet("", asWalletName, asWalletAddress);
     DapChainWalletsModel::getInstance().append(wallet);
 }
 
+void DapServiceController::processSendToken(const QString &asAnswer)
+{
+    qInfo() << QString("processSendToken(%1)").arg(asAnswer);
+}
+
 void DapServiceController::processGetWallets(const QMap<QString, QVariant> &aWallets)
 {
     qInfo() << QString("processGetWallets()") << aWallets.size();
     for(QString w : aWallets.keys())
     {
-        DapChainWallet wallet("", w, aWallets.value(w).toString());
         getWalletInfo(w);
     }
 }
 
-void DapServiceController::processGetWalletInfo(const QString &asWalletName, const QString &asWalletAddress, const QString &aBalance)
+void DapServiceController::processGetWalletInfo(const QString &asWalletName, const QString &asWalletAddress, const QStringList& aBalance, const QStringList &aTokens)
 {
-    qInfo() << QString("processGetWalletInfo(%1, %2, %3)").arg(asWalletName).arg(asWalletAddress).arg(aBalance);
-    DapChainWallet wallet("", asWalletName, asWalletAddress, aBalance);
+    qInfo() << QString("processGetWalletInfo(%1, %2)").arg(asWalletName).arg(asWalletAddress);
+    DapChainWallet wallet("", asWalletName, asWalletAddress, aBalance, aTokens);
     DapChainWalletsModel::getInstance().append(wallet);
+    
+    for (QString s : aBalance) {
+        qDebug() << s;
+    }
 }
 
 /// Get an instance of a class.
diff --git a/KelvinDashboardGUI/DapServiceController.h b/KelvinDashboardGUI/DapServiceController.h
old mode 100644
new mode 100755
index 1edafae669200fbab9c6f7fc3bd1fe23e4f5e362..eaacfd33697666434add3e956a91bd90cc42af0f
--- a/KelvinDashboardGUI/DapServiceController.h
+++ b/KelvinDashboardGUI/DapServiceController.h
@@ -67,6 +67,7 @@ public:
     void setLogModel(const DapLogModel &dapLogModel);
 
     Q_INVOKABLE void addWallet(const QString& asWalletName);
+    Q_INVOKABLE void sendToken(const QString &asSendWallet, const QString& asAddressReceiver, const QString& asToken, const double& aAmount);
 
     void getWalletInfo(const QString& asWalletName);
 
@@ -87,9 +88,11 @@ private slots:
 
     void processAddWallet(const QString& asWalletName, const QString& asWalletAddress);
 
+    void processSendToken(const QString& asAnswer);
+
     void processGetWallets(const QMap<QString, QVariant>& aWallets);
 
-    void processGetWalletInfo(const QString& asWalletName, const QString& asWalletAddress, const QString& aBalance);
+    void processGetWalletInfo(const QString& asWalletName, const QString& asWalletAddress, const QStringList &aBalance, const QStringList& aTokens);
 
 public slots:
     /// Show or hide GUI client by clicking on the tray icon.
diff --git a/KelvinDashboardGUI/DapUiQmlScreenDialogSendToken.qml b/KelvinDashboardGUI/DapUiQmlScreenDialogSendToken.qml
new file mode 100755
index 0000000000000000000000000000000000000000..a1079ba42359fe9314bc5ff9cc35e9ed5d567bb4
--- /dev/null
+++ b/KelvinDashboardGUI/DapUiQmlScreenDialogSendToken.qml
@@ -0,0 +1,150 @@
+import QtQuick 2.9
+import QtQuick.Controls 1.4
+import QtQuick.Controls 2.4
+//import QtQuick.Controls 2.5
+import KelvinDashboard 1.0
+
+Dialog {
+    id: dialogSendToken
+    focus: true
+    modal: true
+    title: qsTr("Send token...")
+
+    width: parent.width/1.5
+    height: 200
+
+    x: parent.width / 2 - width / 2
+    y: parent.height / 2 - height / 2
+
+    function show() {
+            dialogSendToken.open();
+        }
+
+    contentItem:
+
+        Rectangle
+        {
+            anchors.fill: parent
+
+//            TextField
+//                {
+//                            background: Rectangle {
+//                                radius: 2
+//                                border.color: "gray"
+//                                border.width: 1
+//                            }
+
+//                    id: textFieldNameWallet
+//                    selectByMouse: true
+//                    height: 35
+//                    anchors.bottom: buttonOk.top
+//                    anchors.bottomMargin: 20
+//                    anchors.right: parent.right
+//                    anchors.rightMargin: 10
+//                    anchors.left: parent.left
+//                    anchors.leftMargin: 10
+//                    font.pixelSize: 20
+//                    clip: true
+
+
+//                }
+
+            ComboBox {
+                id: comboBoxAddressWallet
+                anchors.bottom: spinBoxAmount.top
+                anchors.bottomMargin: 20
+                anchors.right: parent.right
+                anchors.rightMargin: 10
+                anchors.left: parent.left
+                anchors.leftMargin: 10
+                editable: true
+                textRole: "text"
+                onAccepted: {
+                    if (find(currentText) === -1) {
+                        model.append({text: editText})
+//                        currentIndex = find(editText)
+//                        fnameField.insert(currentIndex)
+
+                    }
+                }
+            }
+
+            SpinBox {
+                id: spinBoxAmount
+                anchors.bottom: buttonOk.top
+                anchors.bottomMargin: 20
+                anchors.right: parent.right
+                anchors.rightMargin: 10
+                editable: true
+            }
+
+            Button
+            {
+                id: buttonCancel
+                text: qsTr("Cancel")
+                anchors.right: buttonOk.left
+                anchors.rightMargin: 10
+                anchors.bottom: parent.bottom
+                anchors.bottomMargin: 10
+
+                contentItem: Text {
+                        text: buttonCancel.text
+                        font: buttonCancel.font
+                        opacity: enabled ? 1.0 : 0.3
+                        color: buttonCancel.down ? "#353841" : "white"
+                        horizontalAlignment: Text.AlignHCenter
+                        verticalAlignment: Text.AlignVCenter
+                        elide: Text.ElideRight
+                    }
+
+                    background: Rectangle {
+                        implicitWidth: 100
+                        implicitHeight: 30
+                        opacity: enabled ? 1 : 0.3
+                        color: buttonCancel.down ? "white" : "#353841"
+                        radius: 4
+                    }
+
+                onClicked:
+                {
+                    textFieldNameWallet.clear()
+                    close()
+                }
+            }
+
+            Button
+            {
+                id: buttonOk
+                text: "OK"
+                anchors.right: parent.right
+                anchors.rightMargin: 10
+                anchors.bottom: parent.bottom
+                anchors.bottomMargin: 10
+                contentItem: Text {
+                        text: buttonOk.text
+                        font: buttonOk.font
+                        opacity: enabled ? 1.0 : 0.3
+                        color: buttonOk.down ? "#353841" : "white"
+                        horizontalAlignment: Text.AlignHCenter
+                        verticalAlignment: Text.AlignVCenter
+                        elide: Text.ElideRight
+                    }
+
+                    background: Rectangle {
+                        implicitWidth: 100
+                        implicitHeight: 30
+                        opacity: enabled ? 1 : 0.3
+                        color: buttonOk.down ? "white" : "#353841"
+                        radius: 4
+                    }
+
+                onClicked:
+                {
+//                    dapServiceController.addWallet(textFieldNameWallet.text)
+                    console.log(comboBoxAddressWallet.displayText)
+                    close()
+                }
+            }
+        }
+
+}
diff --git a/KelvinDashboardGUI/DapUiQmlWidgetChainWallet.qml b/KelvinDashboardGUI/DapUiQmlWidgetChainWallet.qml
old mode 100644
new mode 100755
index 018ef4719b6e7358c1295751519021688828cee2..2dcbae1667e94fb3e86ccee2c7cace90dde0293f
--- a/KelvinDashboardGUI/DapUiQmlWidgetChainWallet.qml
+++ b/KelvinDashboardGUI/DapUiQmlWidgetChainWallet.qml
@@ -25,11 +25,25 @@ DapUiQmlWidgetChainWalletForm {
         }
 
     listViewWallet.onCurrentItemChanged:
+    {
+        listViewTokens.model = listViewWallet.model.get(listViewWallet.currentIndex).tokens
+//        console.log("Заголовок " + listViewWallet.model.get(listViewWallet.currentIndex).address)
         console.log(listViewWallet.currentIndex)
+        
+        
+    }
+    
+    listViewTokens.onCurrentItemChanged:
+    {
+        textBalance.text = listViewWallet.model.get(listViewWallet.currentIndex).balance[listViewTokens.currentIndex]
+    }
 
-    save.onClicked: {
+    buttonSaveWallet.onClicked: {
         dialogAddWallet.show()
-}
+    }
+    buttonSendToken.onClicked: {
+        dialogSendToken.show()
+    }
 
 
 }
diff --git a/KelvinDashboardGUI/DapUiQmlWidgetChainWalletForm.ui.qml b/KelvinDashboardGUI/DapUiQmlWidgetChainWalletForm.ui.qml
old mode 100644
new mode 100755
index 6d5dd626dad1ab09bd4a0155a94a948bbc655c50..68061588903e16cbf1c4d5000e017295476786b1
--- a/KelvinDashboardGUI/DapUiQmlWidgetChainWalletForm.ui.qml
+++ b/KelvinDashboardGUI/DapUiQmlWidgetChainWalletForm.ui.qml
@@ -1,6 +1,8 @@
 import QtQuick 2.11
 import QtGraphicalEffects 1.0
 import QtQuick.Controls 2.2
+import QtQuick.Controls.Styles 1.4
+import KelvinDashboard 1.0
 
 Page {
     id: dapUiQmlWidgetChainWallet
@@ -8,11 +10,17 @@ Page {
     title: qsTr("Wallet")
 
     property alias listViewWallet: listViewWallet
-    property alias save: save
+    property alias buttonSaveWallet: buttonSaveWallet
     property alias dialogAddWallet: dialogAddWallet
+    property alias buttonSendToken: buttonSendToken
+    property alias dialogSendToken: dialogSendToken
+    property alias addressWallet: addressWallet
+    property alias listViewTokens: listViewTokens
+    property alias textBalance: textBalance
 
     Rectangle
     {
+        id: rectanglePanel
         anchors.left: parent.left
         anchors.top: parent.top
         anchors.bottom: parent.bottom
@@ -25,6 +33,7 @@ Page {
             model: dapChainWalletsModel
 
            delegate: Item {
+               id: delegateWallet
                 width: parent.width
                 height: 100
 
@@ -33,44 +42,17 @@ Page {
                         anchors.centerIn: parent
                         spacing: 5
 
-                        Text {
+                        Label {
                             id: nameWallet
                             anchors.horizontalCenter: parent.horizontalCenter
                             text: qsTr(name)
                             font.pixelSize: 14
                             color: "#BBBEBF"
                             font.family: "Roboto"
+                            width: delegateWallet.width
+                            elide: Text.ElideRight
+                            leftPadding: 5
                         }
-
-                        Text {
-                            id: lableBalance
-                            anchors.horizontalCenter: parent.horizontalCenter
-                            text: qsTr(balance)
-                            font.pixelSize: 18
-                            color: "#BBBEBF"
-                            font.family: "Roboto"
-                        }
-
-                        Text {
-                            id: lableCurrency
-                            anchors.horizontalCenter: parent.horizontalCenter
-                            text: "Dollars"
-                            font.pixelSize: 14
-                            color: "#BBBEBF"
-                            font.weight: Font.Light
-                            font.family: "Roboto"
-                        }
-
-//                        TextEdit {
-//                            id: addressWallet
-//                            text:  address
-//                            width: parent.width
-//                            font.pixelSize: 16
-//                            wrapMode: Text.Wrap
-//                            selectByMouse: true
-//       //                    clip: true
-//        //                    elide: Text.ElideRight
-//                        }
                 }
 
                 MouseArea {
@@ -83,27 +65,126 @@ Page {
         }
     }
 
+    Rectangle
+    {
+        anchors.left: rectanglePanel.right
+        anchors.right: parent.right
+        anchors.top: parent.top
+        anchors.bottom: parent.bottom
+
+        TextEdit {
+            id: addressWallet
+            font.pixelSize: 16
+            wrapMode: Text.Wrap
+            selectByMouse: true
+            color: "black"
+            anchors.top: parent.top
+            anchors.horizontalCenter: parent.horizontalCenter
+        }
+        
+        ListView {
+            id: listViewTokens
+            orientation: ListView.Horizontal
+            anchors.top: addressWallet.bottom
+            anchors.left: parent.left
+            anchors.bottom: parent.bottom
+            width: parent.width*2/3
+            delegate:  Item {
+                width: 200; height: 50
+                Text { id: nameField; text: modelData }
+                MouseArea {
+                    anchors.fill: parent
+                    onClicked: listViewTokens.currentIndex = index
+                }
+            }
+            
+            focus: true
+        }
+        
+        Text 
+        {
+            id: textBalance
+            anchors.top: addressWallet.bottom
+            anchors.left: listViewTokens.right
+            anchors.bottom: parent.bottom
+            anchors.right: parent.right
+            
+            font.pixelSize: 70
+            font.bold: true
+        }
+    }
 
     DapUiQmlScreenDialogAddWallet {
         id: dialogAddWallet
             }
+    DapUiQmlScreenDialogSendToken {
+        id: dialogSendToken
+            }
 
     RoundButton {
-            id: deleteWallet
-           text: qsTr("-")
+            id: buttonDeleteWallet
            highlighted: true
            anchors.margins: 10
-           anchors.right: parent.right
-           anchors.bottom: save.top
+           anchors.left: parent.left
+           anchors.bottom: buttonSaveWallet.top
+           height: 40
+           width: 40
+           contentItem: Text {
+               text: qsTr("-")
+               color: "#121B28"
+               horizontalAlignment: Text.AlignHCenter
+               verticalAlignment: Text.AlignVCenter
+               elide: Text.ElideRight
+       
+           }
+                   background: Rectangle {
+                       color: "white"
+                       border.color: "#121B28"
+                       radius: 20
+                   }
     }
 
     RoundButton {
-            id: save
-           text: qsTr("+")
+            id: buttonSaveWallet
+            contentItem: Text {
+                text: qsTr("+")
+                color: "#121B28"
+                horizontalAlignment: Text.AlignHCenter
+                verticalAlignment: Text.AlignVCenter
+                elide: Text.ElideRight
+        
+            }
+            background: Rectangle {
+                id: inSave
+                color: "white"
+                border.color: "#121B28"
+                radius: 20
+            }
+            
+           highlighted: true
+           anchors.margins: 10
+           anchors.left: parent.left
+           anchors.bottom: parent.bottom
+           height: 40
+           width: 40
+    }
+    
+    RoundButton {
+            id: buttonSendToken
+            text: qsTr("->")
            highlighted: true
            anchors.margins: 10
            anchors.right: parent.right
            anchors.bottom: parent.bottom
     }
+    
+    RoundButton {
+            id: buttonAddToken
+            text: qsTr("+")
+           highlighted: true
+           anchors.margins: 10
+           anchors.right: parent.right
+           anchors.bottom: buttonSendToken.top
+    }
 }
 
diff --git a/KelvinDashboardGUI/qml.qrc b/KelvinDashboardGUI/qml.qrc
index ce09fd17cca72a53bd5d1760905f3ffa3b2aecbc..9de95561440b9170571e89abd20950df93bde74f 100755
--- a/KelvinDashboardGUI/qml.qrc
+++ b/KelvinDashboardGUI/qml.qrc
@@ -33,5 +33,6 @@
         <file>Resources/Icons/dialog-warning.png</file>
         <file>DapUiQmlWidgetChainNodeLogs.qml</file>
         <file>DapUiQmlWidgetChainNodeLogsForm.ui.qml</file>
+        <file>DapUiQmlScreenDialogSendToken.qml</file>
     </qresource>
 </RCC>
diff --git a/KelvinDashboardService/DapChainLogHandler.cpp b/KelvinDashboardService/DapChainLogHandler.cpp
old mode 100644
new mode 100755
index de6211b918f1dd4ffebc454eb9782fbe5a3e9aa0..645053a420ccd3650f38e9be06e55b98f6b76a64
--- a/KelvinDashboardService/DapChainLogHandler.cpp
+++ b/KelvinDashboardService/DapChainLogHandler.cpp
@@ -26,7 +26,7 @@ QStringList DapChainLogHandler::request(int aiTimeStamp, int aiRowCount)
 {
     QByteArray result;
     QProcess process;
-    process.start(QString("%1 print_log ts_after %2 limit %3").arg("/home/andrey/Project/build-kelvin-node/kelvin-node-cli").arg(aiTimeStamp).arg(aiRowCount));
+    process.start(QString("%1 print_log ts_after %2 limit %3").arg("/opt/kelvin-node/bin/kelvin-node-cli").arg(aiTimeStamp).arg(aiRowCount));
     process.waitForFinished(-1);
     result = process.readAll();
 
diff --git a/KelvinDashboardService/DapChainWalletHandler.cpp b/KelvinDashboardService/DapChainWalletHandler.cpp
old mode 100644
new mode 100755
index 1277f6a6d81549bb119ab17b18332615ba512787..c26e00b4fb8cf405e816a23fc0ed3bddb4a873c4
--- a/KelvinDashboardService/DapChainWalletHandler.cpp
+++ b/KelvinDashboardService/DapChainWalletHandler.cpp
@@ -1,4 +1,5 @@
 #include "DapChainWalletHandler.h"
+#include <QDebug>
 
 DapChainWalletHandler::DapChainWalletHandler(QObject *parent) : QObject(parent)
 {
@@ -16,7 +17,7 @@ QStringList DapChainWalletHandler::createWallet(const QString &asNameWallet)
 {
     QByteArray result;
     QProcess process;
-    process.start(QString("%1 wallet new -w %2").arg("/home/andrey/Project/build-kelvin-node/kelvin-node-cli").arg(asNameWallet));
+    process.start(QString("%1 wallet new -w %2").arg("/opt/kelvin-node/bin/kelvin-node-cli").arg(asNameWallet));
     process.waitForFinished(-1);
     result = process.readAll();
     QStringList list;
@@ -29,10 +30,12 @@ QMap<QString, QVariant> DapChainWalletHandler::getWallets()
 {
     QMap<QString, QVariant> map;
     QProcess process;
-    process.start(QString("%1 wallet list").arg("/home/andrey/Project/build-kelvin-node/kelvin-node-cli"));
+    process.start(QString("%1 wallet list").arg("/opt/kelvin-node/bin/kelvin-node-cli"));
     process.waitForFinished(-1);
-    QString str = QString::fromLatin1(process.readAll()).remove(" ");
-    QRegExp rx( ":\\b([a-zA-Z0-9]+)\\n" );
+    QString str = QString::fromLatin1(process.readAll());
+    qDebug() << "ZDES`" << str;
+    QRegExp rx(":{1,1}([\\s\\w\\W]+)(\\n|\\r){1,1}" );
+    rx.setMinimal(true);
     int pos = 0;
     int x {0};
     QString tempName;
@@ -57,27 +60,45 @@ QMap<QString, QVariant> DapChainWalletHandler::getWallets()
 QStringList DapChainWalletHandler::getWalletInfo(const QString &asNameWallet)
 {
     QProcess process;
-    process.start(QString("%1 wallet info -w %2 -net kelvin-testnet").arg("/home/andrey/Project/build-kelvin-node/kelvin-node-cli").arg(asNameWallet));
+    process.start(QString("%1 wallet info -w %2 -net private").arg("/opt/kelvin-node/bin/kelvin-node-cli").arg(asNameWallet));
     process.waitForFinished(-1);
     QStringList list;
-    QString str = QString::fromLatin1(process.readAll()).remove(" ");
-    QRegExp rx( "(\\\\n|:)([A-Z0-9]{1,1}[\\w\\S]+)\\\\n" );
+    QString str = QString::fromLatin1(process.readAll()).replace("\\", "\\\\");
+
+    QRegExp rx("[(:\\)\\t]{1,1}([^\\\\\\n\\t]+)[\\\\(|\\n|\\r]{1,1}");
     rx.setMinimal(true);
-    int pos = 0;
-    list = str.split(":");
-    QStringList res;
-    for(QString s : list)
+
+    int pos{0};
+    while((pos = rx.indexIn(str, pos)) != -1)
     {
-        qDebug() << s;
-        if(!s.contains(":"))
-            res.append(s.remove(s.indexOf('\n'), s.size()));
+        list.append(rx.cap(1));
+        pos += rx.matchedLength();
     }
-qDebug() << str;
-//    while ((pos = rx.indexIn(str, pos)) != -1)
-//    {
-//        list.append(rx.cap(2));
-//        pos += rx.matchedLength();
-//    }
     qDebug() << list;
-    return res;
+    return list;
+}
+
+QString DapChainWalletHandler::sendToken(const QString &asSendWallet, const QString &asAddressReceiver, const QString &asToken, const double &aAmount)
+{
+    QString answer;
+    qInfo() << QString("sendToken(%1, %2, %3, %4)").arg(asSendWallet).arg(asAddressReceiver).arg(asToken).arg(aAmount);
+    QProcess processCreate;
+    processCreate.start(QString("%1 tx_create -net private -chain gdb -from_wallet %2 -to_addr %3 -token %4 -value %5")
+                  .arg("/opt/kelvin-node/bin/kelvin-node-cli")
+                  .arg(asSendWallet)
+                  .arg(asAddressReceiver)
+                  .arg(asToken)
+                  .arg(aAmount));
+    processCreate.waitForFinished(-1);
+    QString resultCreate = QString::fromLatin1(processCreate.readAll());
+    qDebug() << resultCreate;
+    if(!(resultCreate.isEmpty() || resultCreate.isNull()))
+    {
+        QProcess processMempool;
+        processMempool.start(QString("%1 mempool_proc -net private -chain gdb").arg("/opt/kelvin-node/bin/kelvin-node-cli"));
+        processMempool.waitForFinished(-1);
+        answer = QString::fromLatin1(processMempool.readAll());
+        qDebug() << answer;
+    }
+    return answer;
 }
diff --git a/KelvinDashboardService/DapChainWalletHandler.h b/KelvinDashboardService/DapChainWalletHandler.h
old mode 100644
new mode 100755
index 53aba37636fbf46179534a4d715f2b86b7696f56..74bf44a656ab52e62f2ebb3f1b5e1fabd5d1805f
--- a/KelvinDashboardService/DapChainWalletHandler.h
+++ b/KelvinDashboardService/DapChainWalletHandler.h
@@ -22,6 +22,7 @@ public slots:
     QStringList createWallet(const QString& asNameWallet);
     QMap<QString, QVariant> getWallets();
     QStringList getWalletInfo(const QString& asNameWallet);
+    QString sendToken(const QString &asSendWallet, const QString& asAddressReceiver, const QString& asToken, const double& aAmount);
 };
 
 #endif // DAPCHAINWALLETHANDLER_H
diff --git a/libKelvinDashboardCommon/DapChainWallet.cpp b/libKelvinDashboardCommon/DapChainWallet.cpp
old mode 100644
new mode 100755
index e3e8ce891fcbc9c2cdad2fa03e59f0a2823726b7..1ef76c80b4b531e11736d85201cd5c9438970e20
--- a/libKelvinDashboardCommon/DapChainWallet.cpp
+++ b/libKelvinDashboardCommon/DapChainWallet.cpp
@@ -1,13 +1,13 @@
 #include "DapChainWallet.h"
 
-DapChainWallet::DapChainWallet(const QString &asIconPath, const QString &asName, const QString &asAddresss, const QString &aBalance, QObject *parent)
-    : QObject(parent), m_sIconPath(asIconPath), m_sName(asName), m_sAddress(asAddresss), m_balance(aBalance)
+DapChainWallet::DapChainWallet(const QString &asIconPath, const QString &asName, const QString &asAddresss, const QStringList &aBalance, const QStringList &aTokens, QObject *parent)
+    : QObject(parent), m_sIconPath(asIconPath), m_sName(asName), m_sAddress(asAddresss), m_balance(aBalance), m_tokens(aTokens)
 {
 
 }
 
 DapChainWallet::DapChainWallet(const QString &asIconPath, const QString &asName, const QString &asAddresss, QObject *parent)
-    : DapChainWallet(asIconPath, asName, asAddresss, 0, parent)
+    : DapChainWallet(asIconPath, asName, asAddresss, QStringList(), QStringList(), parent)
 {
 
 }
@@ -48,14 +48,26 @@ void DapChainWallet::setAddress(const QString &asAddress)
     emit addressChanged(m_sAddress);
 }
 
-QString DapChainWallet::getBalance() const
+QStringList DapChainWallet::getBalance() const
 {
     return m_balance;
 }
 
-void DapChainWallet::setBalance(const QString &aBalance)
+void DapChainWallet::setBalance(const QStringList &aBalance)
 {
     m_balance = aBalance;
 
     emit balanceChanged(m_balance);
 }
+
+QStringList DapChainWallet::getTokens() const
+{
+    return m_tokens;
+}
+
+void DapChainWallet::setTokens(const QStringList &aTokens)
+{
+    m_tokens = aTokens;
+    
+    emit tokensChanged(m_tokens);
+}
diff --git a/libKelvinDashboardCommon/DapChainWallet.h b/libKelvinDashboardCommon/DapChainWallet.h
old mode 100644
new mode 100755
index 152a7c1b065a8bee13a6d4d9183b47329a347478..1537b883d8c6dd5cbffcc236379f799c354bf22d
--- a/libKelvinDashboardCommon/DapChainWallet.h
+++ b/libKelvinDashboardCommon/DapChainWallet.h
@@ -11,18 +11,20 @@ class DapChainWallet : public QObject
     QString m_sIconPath;
     QString m_sName;
     QString m_sAddress;
-    QString  m_balance;
+    QStringList  m_balance;
+    QStringList  m_tokens;
 
 public:
     DapChainWallet(QObject *parent = nullptr) { Q_UNUSED(parent)}
-    DapChainWallet(const QString& asIconPath, const QString &asName, const QString  &asAddresss, const QString &aBalance, QObject * parent = nullptr);
+    DapChainWallet(const QString& asIconPath, const QString &asName, const QString  &asAddresss, const QStringList &aBalance, const QStringList& aTokens, QObject * parent = nullptr);
     DapChainWallet(const QString& asIconPath, const QString &asName, const QString  &asAddresss, QObject * parent = nullptr);
 
 
     Q_PROPERTY(QString iconPath MEMBER m_sIconPath READ getIconPath WRITE setIconPath NOTIFY iconPathChanged)
     Q_PROPERTY(QString name MEMBER m_sName READ getName WRITE setName NOTIFY nameChanged)
     Q_PROPERTY(QString address MEMBER m_sAddress READ getAddress WRITE setAddress NOTIFY addressChanged)
-    Q_PROPERTY(QString balance MEMBER m_balance READ getBalance WRITE setBalance NOTIFY balanceChanged)
+    Q_PROPERTY(QStringList balance MEMBER m_balance READ getBalance WRITE setBalance NOTIFY balanceChanged)
+    Q_PROPERTY(QStringList tokens MEMBER m_tokens READ getTokens WRITE setTokens NOTIFY tokensChanged)
 
     QString getName() const;
     void setName(const QString &asName);
@@ -32,14 +34,18 @@ public:
     QString getIconPath() const;
     void setIconPath(const QString &asIconPath);
 
-    QString getBalance() const;
-    void setBalance(const QString& aBalance);
+    QStringList getBalance() const;
+    void setBalance(const QStringList& aBalance);
+    
+    QStringList getTokens() const;
+    void setTokens(const QStringList& aTokens);
 
 signals:
     void iconPathChanged(const QString& asIconPath);
     void nameChanged(const QString& asName);
     void addressChanged(const QString& asAddress);
-    void balanceChanged(const QString& aBalance);
+    void balanceChanged(const QStringList& aBalance);
+    void tokensChanged(const QStringList& aTokens);
 
 };