@@ -23,7 +23,7 @@ using interfaces::FoundBlock;
2323
2424static constexpr size_t OUTPUT_GROUP_MAX_ENTRIES{100 };
2525
26- int GetTxSpendSize (const CWallet& wallet, const CWalletTx& wtx, unsigned int out, const CCoinControl* coin_control)
26+ TxSize GetTxSpendSize (const CWallet& wallet, const CWalletTx& wtx, unsigned int out, const CCoinControl* coin_control)
2727{
2828 return CalculateMaximumSignedInputSize (wtx.tx ->vout [out], &wallet, coin_control);
2929}
@@ -33,17 +33,19 @@ std::string COutput::ToString() const
3333 return strprintf (" COutput(%s, %d, %d) [%s]" , tx->GetHash ().ToString (), i, nDepth, FormatMoney (tx->tx ->vout [i].nValue ));
3434}
3535
36- int CalculateMaximumSignedInputSize (const CTxOut& txout, const COutPoint outpoint, const SigningProvider* provider, const CCoinControl* coin_control)
36+ TxSize CalculateMaximumSignedInputSize (const CTxOut& txout, const COutPoint outpoint, const SigningProvider* provider, const CCoinControl* coin_control)
3737{
3838 CMutableTransaction txn;
3939 txn.vin .push_back (CTxIn (outpoint));
4040 if (!provider || !DummySignInput (*provider, txn.vin [0 ], txout, coin_control)) {
41- return - 1 ;
41+ return {- 1 , - 1 } ;
4242 }
43- return GetVirtualTransactionInputSize (txn.vin [0 ]);
43+ int64_t vsize = GetVirtualTransactionInputSize (txn.vin [0 ]);
44+ int64_t weight = GetTransactionInputWeight (txn.vin [0 ]);
45+ return TxSize{vsize, weight};
4446}
4547
46- int CalculateMaximumSignedInputSize (const CTxOut& txout, const CWallet* wallet, const CCoinControl* coin_control)
48+ TxSize CalculateMaximumSignedInputSize (const CTxOut& txout, const CWallet* wallet, const CCoinControl* coin_control)
4749{
4850 const std::unique_ptr<SigningProvider> provider = wallet->GetSolvingProvider (txout.scriptPubKey );
4951 return CalculateMaximumSignedInputSize (txout, COutPoint (), provider.get (), coin_control);
@@ -446,7 +448,7 @@ std::optional<SelectionResult> SelectCoins(const CWallet& wallet, const std::vec
446448 std::vector<COutPoint> vPresetInputs;
447449 coin_control.ListSelected (vPresetInputs);
448450 for (const COutPoint& outpoint : vPresetInputs) {
449- int input_bytes = - 1 ;
451+ TxSize input_size{- 1 , - 1 } ;
450452 CTxOut txout;
451453 std::map<uint256, CWalletTx>::const_iterator it = wallet.mapWallet .find (outpoint.hash );
452454 if (it != wallet.mapWallet .end ()) {
@@ -455,19 +457,19 @@ std::optional<SelectionResult> SelectCoins(const CWallet& wallet, const std::vec
455457 if (wtx.tx ->vout .size () <= outpoint.n ) {
456458 return std::nullopt ;
457459 }
458- input_bytes = GetTxSpendSize (wallet, wtx, outpoint.n , &coin_control);
460+ input_size = GetTxSpendSize (wallet, wtx, outpoint.n , &coin_control);
459461 txout = wtx.tx ->vout .at (outpoint.n );
460462 }
461- if (input_bytes == -1 ) {
463+ if (input_size. vsize == -1 ) {
462464 // The input is external. We either did not find the tx in mapWallet, or we did but couldn't compute the input size with wallet data
463465 if (!coin_control.GetExternalOutput (outpoint, txout)) {
464466 // Not ours, and we don't have solving data.
465467 return std::nullopt ;
466468 }
467- input_bytes = CalculateMaximumSignedInputSize (txout, outpoint, &coin_control.m_external_provider , &coin_control);
469+ input_size = CalculateMaximumSignedInputSize (txout, outpoint, &coin_control.m_external_provider , &coin_control);
468470 }
469471
470- CInputCoin coin (outpoint, txout, input_bytes );
472+ CInputCoin coin (outpoint, txout, input_size. vsize , input_size. weight );
471473 if (coin.m_input_bytes == -1 ) {
472474 return std::nullopt ; // Not solvable, can't estimate size for fee
473475 }
@@ -700,7 +702,7 @@ static bool CreateTransactionInternal(
700702 coin_selection_params.change_output_size = GetSerializeSize (change_prototype_txout);
701703
702704 // Get size of spending the change output
703- int change_spend_size = CalculateMaximumSignedInputSize (change_prototype_txout, &wallet);
705+ int change_spend_size = CalculateMaximumSignedInputSize (change_prototype_txout, &wallet). vsize ;
704706 // If the wallet doesn't know how to sign change output, assume p2sh-p2wpkh
705707 // as lower-bound to allow BnB to do it's thing
706708 if (change_spend_size == -1 ) {
0 commit comments