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:
38
src/init.cpp
38
src/init.cpp
@@ -2052,16 +2052,28 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||
|
||||
//Set Sapling Consolidation
|
||||
pwalletMain->fSaplingConsolidationEnabled = GetBoolArg("-consolidation", false);
|
||||
fConsolidationTxFee = GetArg("-consolidationtxfee", DEFAULT_CONSOLIDATION_FEE);
|
||||
fConsolidationMapUsed = !mapMultiArgs["-consolidatesaplingaddress"].empty();
|
||||
if(pwalletMain->fSaplingConsolidationEnabled) {
|
||||
fConsolidationTxFee = GetArg("-consolidationtxfee", DEFAULT_CONSOLIDATION_FEE);
|
||||
fConsolidationMapUsed = !mapMultiArgs["-consolidatesaplingaddress"].empty();
|
||||
|
||||
//Validate Sapling Addresses
|
||||
vector<string>& vaddresses = mapMultiArgs["-consolidatesaplingaddress"];
|
||||
for (int i = 0; i < vaddresses.size(); i++) {
|
||||
LogPrintf("Consolidating Sapling Address: %s\n", vaddresses[i]);
|
||||
auto zAddress = DecodePaymentAddress(vaddresses[i]);
|
||||
if (!IsValidPaymentAddress(zAddress)) {
|
||||
return InitError("Invalid consolidation address");
|
||||
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
|
||||
vector<string>& vaddresses = mapMultiArgs["-consolidatesaplingaddress"];
|
||||
for (int i = 0; i < vaddresses.size(); i++) {
|
||||
LogPrintf("Consolidating Sapling Address: %s\n", vaddresses[i]);
|
||||
auto zAddress = DecodePaymentAddress(vaddresses[i]);
|
||||
if (!IsValidPaymentAddress(zAddress)) {
|
||||
return InitError("Invalid consolidation address");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2069,6 +2081,14 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||
pwalletMain->fSweepEnabled = GetBoolArg("-zsweep", false);
|
||||
|
||||
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);
|
||||
fSweepMapUsed = !mapMultiArgs["-zsweepaddress"].empty();
|
||||
|
||||
|
||||
@@ -284,12 +284,7 @@ bool AsyncRPCOperation_sweep::main_impl() {
|
||||
}
|
||||
|
||||
if (sweepComplete) {
|
||||
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->nextSweep = sweepInterval + chainActive.Tip()->GetHeight();
|
||||
pwalletMain->nextSweep = pwalletMain->sweepInterval + chainActive.Tip()->GetHeight();
|
||||
pwalletMain->fSweepRunning = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -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("running", pwalletMain->fConsolidationRunning));
|
||||
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("consolidationinterval", pwalletMain->consolidationInterval));
|
||||
ret.push_back(Pair("next_consolidation", pwalletMain->nextConsolidation));
|
||||
ret.push_back(Pair("consolidationinterval", pwalletMain->consolidationInterval));
|
||||
ret.push_back(Pair("consolidationaddress", pwalletMain->consolidationAddress));
|
||||
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("running", pwalletMain->fSweepRunning));
|
||||
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("zsweepaddress", pwalletMain->sweepAddress));
|
||||
ret.push_back(Pair("zsweepmaxinputs", pwalletMain->sweepMaxInputs));
|
||||
|
||||
@@ -515,10 +515,11 @@ void CWallet::RunSaplingSweep(int blockHeight) {
|
||||
return;
|
||||
}
|
||||
|
||||
LogPrintf("%s: Sweep enabled at blockHeight=%d nextSweep=%d\n", __func__, blockHeight, nextSweep);
|
||||
if (nextSweep > blockHeight) {
|
||||
LogPrintf("%s: Not time to sweep yet at blockHeight=%d nextSweep=%d\n", __func__, blockHeight, nextSweep);
|
||||
return;
|
||||
}
|
||||
LogPrintf("%s: Sweep enabled at blockHeight=%d nextSweep=%d\n", __func__, blockHeight, nextSweep);
|
||||
|
||||
//Don't Run if consolidation will run soon.
|
||||
if (fSaplingConsolidationEnabled && nextConsolidation - 5 <= blockHeight) {
|
||||
@@ -528,7 +529,7 @@ void CWallet::RunSaplingSweep(int blockHeight) {
|
||||
|
||||
//Don't Run While consolidation is running.
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -557,29 +558,28 @@ void CWallet::RunSaplingConsolidation(int blockHeight) {
|
||||
return;
|
||||
}
|
||||
|
||||
LogPrintf("%s: consolidation enabled at blockHeight=%d fSweepRunning=%d\n", __func__, blockHeight, fSweepRunning );
|
||||
|
||||
if (fSweepRunning) {
|
||||
if (nextConsolidation > blockHeight) {
|
||||
LogPrintf("%s: Not time to consolidate yet at blockHeight=%d nextConsolidation=%d\n", __func__, blockHeight, nextConsolidation);
|
||||
return;
|
||||
}
|
||||
|
||||
int consolidateInterval = 45;
|
||||
LogPrintf("%s: consolidation enabled at blockHeight=%d fSweepRunning=%d\n", __func__, blockHeight, fSweepRunning );
|
||||
|
||||
if(fZdebug)
|
||||
fprintf(stderr,"%s: height=%d interval=%d\n", __func__, blockHeight, consolidateInterval);
|
||||
|
||||
if (blockHeight % consolidateInterval == 0) {
|
||||
LogPrintf("%s: creating consolidation operation at blockHeight=%d\n", __func__, blockHeight);
|
||||
std::shared_ptr<AsyncRPCQueue> q = getAsyncRPCQueue();
|
||||
std::shared_ptr<AsyncRPCOperation> lastOperation = q->getOperationForId(saplingConsolidationOperationId);
|
||||
if (lastOperation != nullptr) {
|
||||
lastOperation->cancel();
|
||||
}
|
||||
pendingSaplingConsolidationTxs.clear();
|
||||
std::shared_ptr<AsyncRPCOperation> operation(new AsyncRPCOperation_saplingconsolidation(blockHeight + 5));
|
||||
saplingConsolidationOperationId = operation->getId();
|
||||
q->addOperation(operation);
|
||||
if (fSweepRunning) {
|
||||
LogPrintf("%s: not consolidating since sweep is currently running at height=%d\n", __func__, blockHeight);
|
||||
return;
|
||||
}
|
||||
|
||||
LogPrintf("%s: creating consolidation operation at blockHeight=%d\n", __func__, blockHeight);
|
||||
std::shared_ptr<AsyncRPCQueue> q = getAsyncRPCQueue();
|
||||
std::shared_ptr<AsyncRPCOperation> lastOperation = q->getOperationForId(saplingConsolidationOperationId);
|
||||
if (lastOperation != nullptr) {
|
||||
lastOperation->cancel();
|
||||
}
|
||||
pendingSaplingConsolidationTxs.clear();
|
||||
std::shared_ptr<AsyncRPCOperation> operation(new AsyncRPCOperation_saplingconsolidation(blockHeight + 5));
|
||||
saplingConsolidationOperationId = operation->getId();
|
||||
q->addOperation(operation);
|
||||
}
|
||||
|
||||
bool CWallet::CommitAutomatedTx(const CTransaction& tx) {
|
||||
|
||||
@@ -811,6 +811,7 @@ public:
|
||||
int amountSwept = 0;
|
||||
int amountConsolidated = 0;
|
||||
int sweepInterval = 10;
|
||||
int consolidationInterval = 25;
|
||||
int sweepFee = 10000;
|
||||
int sweepMaxInputs = 200;
|
||||
std::string sweepAddress = "";
|
||||
|
||||
Reference in New Issue
Block a user