### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current behaviour

The help text says:

```
  replaceable(=N)
       Set RBF opt-in sequence number for input N (if not provided, opt-in all
       available inputs)
```

but when I don't provide N, I get an error:

```
$ bitcoin-tx -create in=0000000000000000000000000000000000000000000000000000000000000000:0 replaceable
error: Invalid TX input index ''
```

### Expected behaviour

I expect bitcoin-tx to act like its help string describes:

```
$ bitcoin-tx -create in=0000000000000000000000000000000000000000000000000000000000000000:0 replaceable
020000000100000000000000000000000000000000000000000000000000000000000000000000000000fdffffff0000000000
```

The fix is simple:

```
diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp
index a05443a2e5..b9348fcad0 100644
--- a/src/bitcoin-tx.cpp
+++ b/src/bitcoin-tx.cpp
@@ -222,7 +222,7 @@ static void MutateTxRBFOptIn(CMutableTransaction& tx, const std::string& strInId
 {
     // parse requested index
     int64_t inIdx;
-    if (!ParseInt64(strInIdx, &inIdx) || inIdx < 0 || inIdx >= static_cast<int64_t>(tx.vin.size())) {
+    if (strInIdx != "" && (!ParseInt64(strInIdx, &inIdx) || inIdx < 0 || inIdx >= static_cast<int64_t>(tx.vin.size()))) {
         throw std::runtime_error("Invalid TX input index '" + strInIdx + "'");
     }
 
```

### Steps to reproduce

Run the command shown above.

### Relevant log output

_No response_

### How did you obtain Bitcoin Core

Compiled from source

### What version of Bitcoin Core are you using?

master@e3eb3aae3

### Operating system and version

Debian 12

### Machine specifications

_No response_
scriptPubKey = GetScriptForDestination(ScriptHash(scriptPubKey));
    }
    
    CTxOut txout(value, scriptPubKey);
    tx.vout.push_back(txout);
}
static void MutateTxAddOutData(CMutableTransaction& tx, const std::string& strInput)
{
    CAmount value = 0;
    
    size_t pos = strInput.find(':');
    if (pos==0)
        throw std::runtime_error("TX output value not specified");
    if (pos == std::string::npos) {
        pos = 0;
    } else {
        
        value = ExtractAndValidateValue(strInput.substr(0, pos));
        ++pos;
    }
    
    const std::string strData{strInput.substr(pos, std::string::npos)};
    if (!IsHex(strData))
        throw std::runtime_error("invalid TX output data");
    std::vector<unsigned char> data = ParseHex(strData);
    CTxOut txout(value, CScript() << OP_RETURN << data);
    tx.vout.push_back(txout);
}
static void MutateTxAddOutScript(CMutableTransaction& tx, const std::string& strInput)