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
|
//Set Sapling Consolidation
|
||||||
pwalletMain->fSaplingConsolidationEnabled = GetBoolArg("-consolidation", false);
|
pwalletMain->fSaplingConsolidationEnabled = GetBoolArg("-consolidation", false);
|
||||||
fConsolidationTxFee = GetArg("-consolidationtxfee", DEFAULT_CONSOLIDATION_FEE);
|
if(pwalletMain->fSaplingConsolidationEnabled) {
|
||||||
fConsolidationMapUsed = !mapMultiArgs["-consolidatesaplingaddress"].empty();
|
fConsolidationTxFee = GetArg("-consolidationtxfee", DEFAULT_CONSOLIDATION_FEE);
|
||||||
|
fConsolidationMapUsed = !mapMultiArgs["-consolidatesaplingaddress"].empty();
|
||||||
|
|
||||||
//Validate Sapling Addresses
|
int consolidationInterval = GetArg("-consolidationinterval", 25);
|
||||||
vector<string>& vaddresses = mapMultiArgs["-consolidatesaplingaddress"];
|
if (consolidationInterval < 5) {
|
||||||
for (int i = 0; i < vaddresses.size(); i++) {
|
fprintf(stderr,"%s: Invalid consolidation interval of %d < 5, setting to default of 25\n", __func__, consolidationInterval);
|
||||||
LogPrintf("Consolidating Sapling Address: %s\n", vaddresses[i]);
|
consolidationInterval = 25;
|
||||||
auto zAddress = DecodePaymentAddress(vaddresses[i]);
|
}
|
||||||
if (!IsValidPaymentAddress(zAddress)) {
|
|
||||||
return InitError("Invalid consolidation address");
|
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);
|
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();
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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));
|
||||||
|
ret.push_back(Pair("next_consolidation", pwalletMain->nextConsolidation));
|
||||||
if (pwalletMain->fConsolidationRunning) {
|
ret.push_back(Pair("consolidationinterval", pwalletMain->consolidationInterval));
|
||||||
// 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("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));
|
||||||
|
ret.push_back(Pair("next_zsweep", pwalletMain->nextSweep));
|
||||||
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("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));
|
||||||
|
|||||||
@@ -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,29 +558,28 @@ 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);
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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) {
|
bool CWallet::CommitAutomatedTx(const CTransaction& tx) {
|
||||||
|
|||||||
@@ -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 = "";
|
||||||
|
|||||||
Reference in New Issue
Block a user