diff --git a/chain/wallet/handlers/DapXchangeOrderPurchase.cpp b/chain/wallet/handlers/DapXchangeOrderPurchase.cpp
index 519014770c34655ec9f9056a2e8ffaea359b251f..04d40de2e960220aebf8ab18591f0b4ae7ff340f 100644
--- a/chain/wallet/handlers/DapXchangeOrderPurchase.cpp
+++ b/chain/wallet/handlers/DapXchangeOrderPurchase.cpp
@@ -13,18 +13,22 @@ QVariant DapXchangeOrderPurchase::respondToClient(const QVariant &args)
 {
     DapAbstractCommand::respondToClient(args);
 
-    QJsonObject resultObj;
-
     auto resultJson = cmdList->xchangeOrderPurchase(args);
     auto resultStruct = cmdList->getJsonResult(resultJson, "DapXchangeOrderPurchase");
 
     auto result = resultStruct.result;
-    auto failTransaction = [&result, this]() -> QVariant
+    auto failTransaction = [&args, &result, this]() -> QVariant
     {
+        QJsonObject obj;
+        obj.insert(SUCCESS,QJsonValue(false));
+        obj.insert(MESSAGE,QJsonValue(result));
+
         QJsonObject resultObj;
-        resultObj.insert(SUCCESS,QJsonValue(false));
-        resultObj.insert(MESSAGE,QJsonValue(result));
-        QJsonDocument resultDoc(QJsonObject{{RESULT_KEY, resultObj}});
+        resultObj.insert(RESULT_KEY, obj);
+        resultObj.insert(ERROR_KEY, result);
+        addWeb3Result(resultObj, args);
+
+        QJsonDocument resultDoc(resultObj);
         return resultDoc.toJson();
     };
 
@@ -57,12 +61,18 @@ QVariant DapXchangeOrderPurchase::respondToClient(const QVariant &args)
         qWarning() << "[DapXchangeOrderCreate] The hash string is empty.";
         return failTransaction();
     }
-    
-    resultObj.insert(SUCCESS,QJsonValue(true));
-    resultObj.insert(MESSAGE,QJsonValue("Exchange transaction has done"));
-    resultObj.insert(HASH, QJsonValue(hash));
 
-    QJsonDocument resultDoc(QJsonObject{{RESULT_KEY, resultObj}});
+    QJsonObject obj;
+    obj.insert(SUCCESS,QJsonValue(true));
+    obj.insert(MESSAGE,QJsonValue("Exchange transaction has done"));
+    obj.insert(HASH, QJsonValue(hash));
+
+    QJsonObject resultObj;
+    resultObj.insert(RESULT_KEY, obj);
+    addWeb3Result(resultObj, args);
+
+    QJsonDocument resultDoc(resultObj);
+
     return resultDoc.toJson();
 }
 
@@ -76,4 +86,5 @@ void DapXchangeOrderPurchase::replyFromService()
     QJsonObject resultObj = replyObj[RESULT_KEY].toObject();
 
     emit serviceResponded(resultObj);
+
 }
diff --git a/chain/wallet/handlers/stackCommand/DapXchangeOrderPurchaseStack.cpp b/chain/wallet/handlers/stackCommand/DapXchangeOrderPurchaseStack.cpp
index f562171e84215a189a9097a753c545e15596891c..9ec51964f70d79b278dcfd857c12ba26d95c2735 100644
--- a/chain/wallet/handlers/stackCommand/DapXchangeOrderPurchaseStack.cpp
+++ b/chain/wallet/handlers/stackCommand/DapXchangeOrderPurchaseStack.cpp
@@ -9,6 +9,7 @@ DapXchangeOrderPurchaseStack::DapXchangeOrderPurchaseStack(const QString &asServ
     m_commandManager->setParentCalback([&](const QVariant &args) -> QVariant { return DapXchangeOrderPurchase::respondToClient(args); });
     m_commandManager->setWalletNameCalback([&](const QStringList &list) -> QString { return list[2]; });
     m_commandManager->setNetworkNameCalback([&](const QStringList &list) -> QString { return list[1];});
+    m_commandManager->setWeb3UpdateCalback([&](QJsonObject& result, const QVariant& args){ addWeb3Result(result, args); });
 
     DapTransactionQueueController* controller = DapTransactionQueueController::getTransactionController();
     DapTransactionQueueController::ParamsFromCommand callbacks;
@@ -26,6 +27,17 @@ DapXchangeOrderPurchaseStack::DapXchangeOrderPurchaseStack(const QString &asServ
 
 QVariant DapXchangeOrderPurchaseStack::respondToClient(const QVariant &args)
 {
+    QStringList params = args.toStringList();
+    if(!params.contains("self") && params.contains(WEB3_KEY))
+    {
+        QString fee = "50000000000000000";
+        auto docFee = getFee()[params[1]];
+        if(!docFee.validatorFeeList["median"].datoshi.isEmpty())
+            fee = docFee.validatorFeeList["median"].datoshi;
+
+        params.insert(4, fee);
+        return m_commandManager->respondToClient(params);
+    }
     return m_commandManager->respondToClient(args);
 }