Introduce MAX_BIP125_RBF_SEQUENCE constant
This commit is contained in:
parent
575cde4605
commit
b005bf21a7
4 changed files with 9 additions and 4 deletions
|
@ -13,6 +13,7 @@
|
|||
#include "core_io.h"
|
||||
#include "keystore.h"
|
||||
#include "policy/policy.h"
|
||||
#include "policy/rbf.h"
|
||||
#include "primitives/transaction.h"
|
||||
#include "script/script.h"
|
||||
#include "script/sign.h"
|
||||
|
@ -215,7 +216,7 @@ static void MutateTxRBFOptIn(CMutableTransaction& tx, const std::string& strInId
|
|||
int cnt = 0;
|
||||
for (CTxIn& txin : tx.vin) {
|
||||
if (strInIdx == "" || cnt == inIdx) {
|
||||
txin.nSequence = std::numeric_limits<unsigned int>::max() - 2;
|
||||
txin.nSequence = MAX_BIP125_RBF_SEQUENCE;
|
||||
}
|
||||
++cnt;
|
||||
}
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
|
||||
#include "txmempool.h"
|
||||
|
||||
static const uint32_t MAX_BIP125_RBF_SEQUENCE = 0xfffffffd;
|
||||
|
||||
enum RBFTransactionState {
|
||||
RBF_TRANSACTIONSTATE_UNKNOWN,
|
||||
RBF_TRANSACTIONSTATE_REPLACEABLE_BIP125,
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include "merkleblock.h"
|
||||
#include "net.h"
|
||||
#include "policy/policy.h"
|
||||
#include "policy/rbf.h"
|
||||
#include "primitives/transaction.h"
|
||||
#include "rpc/server.h"
|
||||
#include "script/script.h"
|
||||
|
@ -359,7 +360,7 @@ UniValue createrawtransaction(const JSONRPCRequest& request)
|
|||
|
||||
uint32_t nSequence;
|
||||
if (rbfOptIn) {
|
||||
nSequence = std::numeric_limits<uint32_t>::max() - 2;
|
||||
nSequence = MAX_BIP125_RBF_SEQUENCE;
|
||||
} else if (rawTx.nLockTime) {
|
||||
nSequence = std::numeric_limits<uint32_t>::max() - 1;
|
||||
} else {
|
||||
|
@ -372,7 +373,7 @@ UniValue createrawtransaction(const JSONRPCRequest& request)
|
|||
int64_t seqNr64 = sequenceObj.get_int64();
|
||||
if (seqNr64 < 0 || seqNr64 > std::numeric_limits<uint32_t>::max()) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, sequence number is out of range");
|
||||
} else if (seqNr64 <= std::numeric_limits<uint32_t>::max() - 2 && request.params.size() > 3 && request.params[3].isFalse()) {
|
||||
} else if (seqNr64 <= MAX_BIP125_RBF_SEQUENCE && request.params.size() > 3 && request.params[3].isFalse()) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter combination: Sequence number contradicts optintorbf option");
|
||||
} else {
|
||||
nSequence = (uint32_t)seqNr64;
|
||||
|
|
|
@ -2685,9 +2685,10 @@ bool CWallet::CreateTransaction(const std::vector<CRecipient>& vecSend, CWalletT
|
|||
// and in the spirit of "smallest possible change from prior
|
||||
// behavior."
|
||||
bool rbf = coinControl ? coinControl->signalRbf : fWalletRbf;
|
||||
const uint32_t nSequence = rbf ? MAX_BIP125_RBF_SEQUENCE : (std::numeric_limits<unsigned int>::max() - 1);
|
||||
for (const auto& coin : setCoins)
|
||||
txNew.vin.push_back(CTxIn(coin.outpoint,CScript(),
|
||||
std::numeric_limits<unsigned int>::max() - (rbf ? 2 : 1)));
|
||||
nSequence));
|
||||
|
||||
// Fill in dummy signatures for fee calculation.
|
||||
if (!DummySignTx(txNew, setCoins)) {
|
||||
|
|
Loading…
Reference in a new issue