]> Git Repo - VerusCoin.git/commitdiff
Fee calculation fix
authormiketout <[email protected]>
Fri, 8 May 2020 00:51:17 +0000 (17:51 -0700)
committermiketout <[email protected]>
Fri, 8 May 2020 00:51:17 +0000 (17:51 -0700)
src/pbaas/pbaas.cpp
src/pbaas/reserves.cpp

index 221da37150a00b0cc93c28a72195bfa0ef32c679..49ea84ad0253d2ad2d0855ab4dfe8befeea28497 100644 (file)
@@ -1265,21 +1265,11 @@ void CConnectedChains::AggregateChainTransfers(const CTxDestination &feeOutput,
                                     }
                                     else
                                     {
-                                        CAmount valueOut = 0;
-                                        if (isMint)
-                                        {
-                                            CCurrencyValueMap newFees = txInputs[j].second.CalculateFee(txInputs[j].second.flags, valueOut);
-                                            totalTxFees += newFees;
-                                            totalAmounts += newFees;
-                                        }
-                                        else
-                                        {
-                                            valueOut = txInputs[j].second.nValue;
-                                            totalTxFees += txInputs[j].second.CalculateFee(txInputs[j].second.flags, valueOut);
-                                            totalAmounts += newTransferInput;
-                                        }
-                                        CReserveTransfer rt(txInputs[j].second);
-                                        chainObjects.push_back(new CChainObject<CReserveTransfer>(ObjTypeCode(rt), rt));
+                                        CAmount valueOut = isMint ? 0 : txInputs[j].second.nValue;
+                                        CCurrencyValueMap newFees;
+                                        totalTxFees += txInputs[j].second.CalculateFee(txInputs[j].second.flags, valueOut);
+                                        totalAmounts += newTransferInput;
+                                        chainObjects.push_back(new CChainObject<CReserveTransfer>(ObjTypeCode(txInputs[j].second), txInputs[j].second));
                                     }
                                 }
 
@@ -1296,7 +1286,7 @@ void CConnectedChains::AggregateChainTransfers(const CTxDestination &feeOutput,
                                     continue;
                                 }
 
-                                //printf("%s: total export amounts:\n%s\n", __func__, totalAmounts.ToUniValue().write().c_str());
+                                printf("%s: total export amounts:\n%s\n", __func__, totalAmounts.ToUniValue().write().c_str());
 
                                 CCrossChainExport ccx(lastChain, numInputs, totalAmounts, totalTxFees);
 
index 185e39e797205dbee60306d0fbaada5abdec4457..f22863c5b929c2e9ab66a7ee995fab8f58f378c1 100644 (file)
@@ -1405,8 +1405,6 @@ bool CReserveTransactionDescriptor::AddReserveTransferImportOutputs(const uint16
                     return false;
                 }
 
-                // fee has already been accounted for, so skip it
-                // in all other cases, calculate inputs from export
                 if (!(curTransfer.flags & curTransfer.FEE_OUTPUT))
                 {
                     if (curTransfer.currencyID == systemDestID && !(curTransfer.flags & (curTransfer.MINT_CURRENCY | curTransfer.PREALLOCATE)))
@@ -1425,7 +1423,10 @@ bool CReserveTransactionDescriptor::AddReserveTransferImportOutputs(const uint16
                             AddReserveInput(curTransfer.currencyID, curTransfer.nValue + curTransfer.nFees);
                         }
                     }
-                    transferFees.valueMap[curTransfer.currencyID] += curTransfer.nFees;
+                    if (!(curTransfer.flags & curTransfer.PRECONVERT))
+                    {
+                        transferFees.valueMap[curTransfer.currencyID] += curTransfer.nFees;
+                    }
 
                     if (curTransfer.flags & curTransfer.PREALLOCATE)
                     {
@@ -1673,11 +1674,14 @@ bool CReserveTransactionDescriptor::AddReserveTransferImportOutputs(const uint16
     }
     ReserveInputs.valueMap[currencyDest.systemID] += nativeIn;
     ReserveOutputs.valueMap[currencyDest.systemID] += nativeOut;
-    CCrossChainExport ccx(systemDestID, numTransfers, ReserveInputs - transferFees, transferFees);
+    CCrossChainExport ccx(systemDestID, numTransfers, ReserveInputs, transferFees);
     if (ReserveInputs - ReserveOutputs < ccx.CalculateImportFee())
     {
-        printf("%s: Too much fee taken by export, ReserveInputs: %s\nReserveOutputs: %s\nccx: %s\n", __func__,
-                ReserveInputs.ToUniValue().write(1,2).c_str(), ReserveOutputs.ToUniValue().write(1,2).c_str(), ccx.ToUniValue().write(1,2).c_str());
+        printf("%s: Too much fee taken by export, ReserveInputs: %s\nReserveOutputs: %s\nccx.CalculateImportFee(): %s\nccx: %s\n", __func__,
+                ReserveInputs.ToUniValue().write(1,2).c_str(), 
+                ReserveOutputs.ToUniValue().write(1,2).c_str(), 
+                ccx.CalculateImportFee().ToUniValue().write(1,2).c_str(), 
+                ccx.ToUniValue().write(1,2).c_str());
         LogPrintf("%s: Too much fee taken by export\n", __func__);
         return false;
     }
This page took 0.036165 seconds and 4 git commands to generate.