Check mempooltxinputlimit when creating a transaction to avoid local
mempool rejection.
This commit is contained in:
parent
5799c5f8c0
commit
9e84b5aa0d
|
@ -203,7 +203,18 @@ bool AsyncRPCOperation_sendmany::main_impl() {
|
||||||
if (isfromzaddr_ && !find_unspent_notes()) {
|
if (isfromzaddr_ && !find_unspent_notes()) {
|
||||||
throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, "Insufficient funds, no unspent notes found for zaddr from address.");
|
throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, "Insufficient funds, no unspent notes found for zaddr from address.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check mempooltxinputlimit to avoid creating a transaction which the local mempool rejects
|
||||||
|
if (isfromtaddr_) {
|
||||||
|
size_t limit = (size_t)GetArg("-mempooltxinputlimit", 0);
|
||||||
|
if (limit > 0) {
|
||||||
|
size_t n = t_inputs_.size();
|
||||||
|
if (n > limit) {
|
||||||
|
throw JSONRPCError(RPC_WALLET_ERROR, strprintf("Too many transparent inputs %zu > limit %zu", n, limit));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CAmount t_inputs_total = 0;
|
CAmount t_inputs_total = 0;
|
||||||
for (SendManyInputUTXO & t : t_inputs_) {
|
for (SendManyInputUTXO & t : t_inputs_) {
|
||||||
t_inputs_total += std::get<2>(t);
|
t_inputs_total += std::get<2>(t);
|
||||||
|
|
|
@ -2717,6 +2717,16 @@ bool CWallet::CreateTransaction(const vector<CRecipient>& vecSend, CWalletTx& wt
|
||||||
txNew.vin.push_back(CTxIn(coin.first->GetHash(),coin.second,CScript(),
|
txNew.vin.push_back(CTxIn(coin.first->GetHash(),coin.second,CScript(),
|
||||||
std::numeric_limits<unsigned int>::max()-1));
|
std::numeric_limits<unsigned int>::max()-1));
|
||||||
|
|
||||||
|
// Check mempooltxinputlimit to avoid creating a transaction which the local mempool rejects
|
||||||
|
size_t limit = (size_t)GetArg("-mempooltxinputlimit", 0);
|
||||||
|
if (limit > 0) {
|
||||||
|
size_t n = txNew.vin.size();
|
||||||
|
if (n > limit) {
|
||||||
|
strFailReason = _(strprintf("Too many transparent inputs %zu > limit %zu", n, limit).c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Sign
|
// Sign
|
||||||
int nIn = 0;
|
int nIn = 0;
|
||||||
CTransaction txNewConst(txNew);
|
CTransaction txNewConst(txNew);
|
||||||
|
|
Loading…
Reference in New Issue