Parse sweep+consolidation intervals on startup, add consolidationinterval config option, change consolidation interval default to 25, only validate consolidatesaplingaddress if consolidation is enabled

This commit is contained in:
Duke Leto
2022-09-11 21:56:21 -04:00
parent 9347b1fa12
commit 5b15d790f9
5 changed files with 54 additions and 57 deletions

View File

@@ -2052,9 +2052,20 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
//Set Sapling Consolidation //Set Sapling Consolidation
pwalletMain->fSaplingConsolidationEnabled = GetBoolArg("-consolidation", false); pwalletMain->fSaplingConsolidationEnabled = GetBoolArg("-consolidation", false);
if(pwalletMain->fSaplingConsolidationEnabled) {
fConsolidationTxFee = GetArg("-consolidationtxfee", DEFAULT_CONSOLIDATION_FEE); fConsolidationTxFee = GetArg("-consolidationtxfee", DEFAULT_CONSOLIDATION_FEE);
fConsolidationMapUsed = !mapMultiArgs["-consolidatesaplingaddress"].empty(); fConsolidationMapUsed = !mapMultiArgs["-consolidatesaplingaddress"].empty();
int consolidationInterval = GetArg("-consolidationinterval", 25);
if (consolidationInterval < 5) {
fprintf(stderr,"%s: Invalid consolidation interval of %d < 5, setting to default of 25\n", __func__, consolidationInterval);
consolidationInterval = 25;
}
pwalletMain->consolidationInterval = consolidationInterval;
pwalletMain->nextConsolidation = pwalletMain->consolidationInterval + chainActive.Tip()->GetHeight();
LogPrintf("%s: set nextConsolidation=%d\n", __func__, pwalletMain->nextConsolidation );
//Validate Sapling Addresses //Validate Sapling Addresses
vector<string>& vaddresses = mapMultiArgs["-consolidatesaplingaddress"]; vector<string>& vaddresses = mapMultiArgs["-consolidatesaplingaddress"];
for (int i = 0; i < vaddresses.size(); i++) { for (int i = 0; i < vaddresses.size(); i++) {
@@ -2064,11 +2075,20 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
return InitError("Invalid consolidation address"); return InitError("Invalid consolidation address");
} }
} }
}
//Set Sweep //Set Sweep
pwalletMain->fSweepEnabled = GetBoolArg("-zsweep", false); pwalletMain->fSweepEnabled = GetBoolArg("-zsweep", false);
if (pwalletMain->fSweepEnabled) { if (pwalletMain->fSweepEnabled) {
int sweepInterval = GetArg("-zsweepinterval", 10);
if (sweepInterval < 5) {
fprintf(stderr,"%s: Invalid sweep interval of %d, setting to default of 10\n", __func__, sweepInterval);
sweepInterval = 10;
}
pwalletMain->sweepInterval = sweepInterval;
pwalletMain->nextSweep = pwalletMain->sweepInterval + chainActive.Tip()->GetHeight();
LogPrintf("%s: set nextSweep=%d with sweepInterval=%d\n", __func__, pwalletMain->nextSweep, pwalletMain->sweepInterval );
fSweepTxFee = GetArg("-zsweepfee", DEFAULT_SWEEP_FEE); fSweepTxFee = GetArg("-zsweepfee", DEFAULT_SWEEP_FEE);
fSweepMapUsed = !mapMultiArgs["-zsweepaddress"].empty(); fSweepMapUsed = !mapMultiArgs["-zsweepaddress"].empty();

View File

@@ -284,12 +284,7 @@ bool AsyncRPCOperation_sweep::main_impl() {
} }
if (sweepComplete) { if (sweepComplete) {
int sweepInterval = GetArg("-zsweepinterval", 10); pwalletMain->nextSweep = pwalletMain->sweepInterval + chainActive.Tip()->GetHeight();
if (sweepInterval < 5) {
fprintf(stderr,"%s: Invalid sweep interval of %d, setting to default of 10\n", __func__, sweepInterval);
sweepInterval = 10;
}
pwalletMain->nextSweep = sweepInterval + chainActive.Tip()->GetHeight();
pwalletMain->fSweepRunning = false; pwalletMain->fSweepRunning = false;
} }

View File

@@ -3337,18 +3337,8 @@ UniValue z_consolidationstatus(const UniValue& params, bool fHelp, const CPubKey
ret.push_back(Pair("consolidation", pwalletMain->fSaplingConsolidationEnabled)); ret.push_back(Pair("consolidation", pwalletMain->fSaplingConsolidationEnabled));
ret.push_back(Pair("running", pwalletMain->fConsolidationRunning)); ret.push_back(Pair("running", pwalletMain->fConsolidationRunning));
ret.push_back(Pair("amount_consolidated", pwalletMain->amountConsolidated)); ret.push_back(Pair("amount_consolidated", pwalletMain->amountConsolidated));
if (pwalletMain->fConsolidationRunning) {
// TODO: set a static consolidationInterval instead of it being non-deterministic
// ret.push_back(Pair("next_consolidation", pwalletMain->consolidationInterval + chainActive.Tip()->GetHeight()));
} else {
if (pwalletMain->nextConsolidation == 0) {
ret.push_back(Pair("next_consolidation", chainActive.Tip()->GetHeight() + 1));
} else {
ret.push_back(Pair("next_consolidation", pwalletMain->nextConsolidation)); ret.push_back(Pair("next_consolidation", pwalletMain->nextConsolidation));
} ret.push_back(Pair("consolidationinterval", pwalletMain->consolidationInterval));
}
// ret.push_back(Pair("consolidationinterval", pwalletMain->consolidationInterval));
ret.push_back(Pair("consolidationaddress", pwalletMain->consolidationAddress)); ret.push_back(Pair("consolidationaddress", pwalletMain->consolidationAddress));
ret.push_back(Pair("consolidationtxfee",(int)fConsolidationTxFee)); ret.push_back(Pair("consolidationtxfee",(int)fConsolidationTxFee));
@@ -3377,16 +3367,7 @@ UniValue z_sweepstatus(const UniValue& params, bool fHelp, const CPubKey& mypk)
ret.push_back(Pair("zsweep", pwalletMain->fSweepEnabled)); ret.push_back(Pair("zsweep", pwalletMain->fSweepEnabled));
ret.push_back(Pair("running", pwalletMain->fSweepRunning)); ret.push_back(Pair("running", pwalletMain->fSweepRunning));
ret.push_back(Pair("amount_swept", pwalletMain->amountSwept)); ret.push_back(Pair("amount_swept", pwalletMain->amountSwept));
if (pwalletMain->fConsolidationRunning) {
ret.push_back(Pair("next_zsweep", pwalletMain->sweepInterval + chainActive.Tip()->GetHeight()));
} else {
if (pwalletMain->nextSweep == 0) {
ret.push_back(Pair("next_zsweep", chainActive.Tip()->GetHeight() + 1));
} else {
ret.push_back(Pair("next_zsweep", pwalletMain->nextSweep)); ret.push_back(Pair("next_zsweep", pwalletMain->nextSweep));
}
}
ret.push_back(Pair("zsweepinterval", pwalletMain->sweepInterval)); ret.push_back(Pair("zsweepinterval", pwalletMain->sweepInterval));
ret.push_back(Pair("zsweepaddress", pwalletMain->sweepAddress)); ret.push_back(Pair("zsweepaddress", pwalletMain->sweepAddress));
ret.push_back(Pair("zsweepmaxinputs", pwalletMain->sweepMaxInputs)); ret.push_back(Pair("zsweepmaxinputs", pwalletMain->sweepMaxInputs));

View File

@@ -515,10 +515,11 @@ void CWallet::RunSaplingSweep(int blockHeight) {
return; return;
} }
LogPrintf("%s: Sweep enabled at blockHeight=%d nextSweep=%d\n", __func__, blockHeight, nextSweep);
if (nextSweep > blockHeight) { if (nextSweep > blockHeight) {
LogPrintf("%s: Not time to sweep yet at blockHeight=%d nextSweep=%d\n", __func__, blockHeight, nextSweep);
return; return;
} }
LogPrintf("%s: Sweep enabled at blockHeight=%d nextSweep=%d\n", __func__, blockHeight, nextSweep);
//Don't Run if consolidation will run soon. //Don't Run if consolidation will run soon.
if (fSaplingConsolidationEnabled && nextConsolidation - 5 <= blockHeight) { if (fSaplingConsolidationEnabled && nextConsolidation - 5 <= blockHeight) {
@@ -528,7 +529,7 @@ void CWallet::RunSaplingSweep(int blockHeight) {
//Don't Run While consolidation is running. //Don't Run While consolidation is running.
if (fConsolidationRunning) { if (fConsolidationRunning) {
LogPrintf("%s: not sweeping since consolidation is currently running\n", __func__); LogPrintf("%s: not sweeping since consolidation is currently running at height=%d\n", __func__, blockHeight);
return; return;
} }
@@ -557,18 +558,18 @@ void CWallet::RunSaplingConsolidation(int blockHeight) {
return; return;
} }
LogPrintf("%s: consolidation enabled at blockHeight=%d fSweepRunning=%d\n", __func__, blockHeight, fSweepRunning ); if (nextConsolidation > blockHeight) {
LogPrintf("%s: Not time to consolidate yet at blockHeight=%d nextConsolidation=%d\n", __func__, blockHeight, nextConsolidation);
if (fSweepRunning) {
return; return;
} }
int consolidateInterval = 45; LogPrintf("%s: consolidation enabled at blockHeight=%d fSweepRunning=%d\n", __func__, blockHeight, fSweepRunning );
if(fZdebug) if (fSweepRunning) {
fprintf(stderr,"%s: height=%d interval=%d\n", __func__, blockHeight, consolidateInterval); LogPrintf("%s: not consolidating since sweep is currently running at height=%d\n", __func__, blockHeight);
return;
}
if (blockHeight % consolidateInterval == 0) {
LogPrintf("%s: creating consolidation operation at blockHeight=%d\n", __func__, blockHeight); LogPrintf("%s: creating consolidation operation at blockHeight=%d\n", __func__, blockHeight);
std::shared_ptr<AsyncRPCQueue> q = getAsyncRPCQueue(); std::shared_ptr<AsyncRPCQueue> q = getAsyncRPCQueue();
std::shared_ptr<AsyncRPCOperation> lastOperation = q->getOperationForId(saplingConsolidationOperationId); std::shared_ptr<AsyncRPCOperation> lastOperation = q->getOperationForId(saplingConsolidationOperationId);
@@ -580,7 +581,6 @@ void CWallet::RunSaplingConsolidation(int blockHeight) {
saplingConsolidationOperationId = operation->getId(); saplingConsolidationOperationId = operation->getId();
q->addOperation(operation); q->addOperation(operation);
} }
}
bool CWallet::CommitAutomatedTx(const CTransaction& tx) { bool CWallet::CommitAutomatedTx(const CTransaction& tx) {
CWalletTx wtx(this, tx); CWalletTx wtx(this, tx);

View File

@@ -811,6 +811,7 @@ public:
int amountSwept = 0; int amountSwept = 0;
int amountConsolidated = 0; int amountConsolidated = 0;
int sweepInterval = 10; int sweepInterval = 10;
int consolidationInterval = 25;
int sweepFee = 10000; int sweepFee = 10000;
int sweepMaxInputs = 200; int sweepMaxInputs = 200;
std::string sweepAddress = ""; std::string sweepAddress = "";