Browse Source

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

pull/195/head
Duke Leto 2 years ago
parent
commit
5b15d790f9
  1. 40
      src/init.cpp
  2. 7
      src/wallet/asyncrpcoperation_sweep.cpp
  3. 25
      src/wallet/rpcwallet.cpp
  4. 36
      src/wallet/wallet.cpp
  5. 1
      src/wallet/wallet.h

40
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();
//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");
if(pwalletMain->fSaplingConsolidationEnabled) {
fConsolidationTxFee = GetArg("-consolidationtxfee", DEFAULT_CONSOLIDATION_FEE);
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
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();

7
src/wallet/asyncrpcoperation_sweep.cpp

@ -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;
}

25
src/wallet/rpcwallet.cpp

@ -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));

36
src/wallet/wallet.cpp

@ -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;
}
if (nextConsolidation > blockHeight) {
LogPrintf("%s: Not time to consolidate yet at blockHeight=%d nextConsolidation=%d\n", __func__, blockHeight, nextConsolidation);
return;
}
LogPrintf("%s: consolidation enabled at blockHeight=%d fSweepRunning=%d\n", __func__, blockHeight, fSweepRunning );
if (fSweepRunning) {
LogPrintf("%s: not consolidating since sweep is currently running at height=%d\n", __func__, blockHeight);
return;
}
int consolidateInterval = 45;
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);
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) {

1
src/wallet/wallet.h

@ -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 = "";

Loading…
Cancel
Save