mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 22:50:59 +01:00
Merge bitcoin/bitcoin#28246: wallet: Use CTxDestination in CRecipient instead of just scriptPubKey
ad0c469d98wallet: Use CTxDestination in CRecipient rather than scriptPubKey (Andrew Chow)07d3bdf4ebAdd PubKeyDestination for P2PK scripts (Andrew Chow)1a98a51c66Allow CNoDestination to represent a raw script (Andrew Chow)8dd067088dMake WitnessUnknown members private (Andrew Chow) Pull request description: For silent payments, we want to provide a `SilentPaymentsDestination` to be used as the recipient, which requires `CRecipient` to use something other than just the `scriptPubKey` as we cannot know the output script for a silent payment prior to transaction creation. `CTxDestination` seems like the obvious place to add a `SilentPaymentsDestination` as it is our internal representation of an address. In order to still allow paying to arbitrary scriptPubKeys (e.g. for data carrier outputs, or the user hand crafted a raw transaction that they have given to `fundrawtransaction`), `CNoDestination` is changed to contain raw scripts. Additionally, P2PK scripts are now interpreted as a new `PubKeyDestination` rather than `PKHash`. This results in some things that would have given an address for P2PK scripts to no longer do so. This is arguably more correct. `ExtractDestination`'s behavior is slightly changed for the above. It now returns `true` for those destinations that have addresses, so P2PK scripts now result in `false`. Even though it returns false for `CNoDestination`, the script will now be included in that `CNoDestination`. Builds on #28244 ACKs for top commit: josibake: ACKad0c469d98Tree-SHA512: ef3f8f3c7284779d9806c77c85b21caf910a79a1f7e7f1b51abcc0d7e074f14e00abf30f625a13075e41d94dad6202c10ddff462c0ee74c2ca4aab585b145a52
This commit is contained in:
@@ -257,12 +257,12 @@ Result CreateRateBumpTransaction(CWallet& wallet, const uint256& txid, const CCo
|
||||
const auto& txouts = outputs.empty() ? wtx.tx->vout : outputs;
|
||||
for (size_t i = 0; i < txouts.size(); ++i) {
|
||||
const CTxOut& output = txouts.at(i);
|
||||
CTxDestination dest;
|
||||
ExtractDestination(output.scriptPubKey, dest);
|
||||
if (reduce_output.has_value() ? reduce_output.value() == i : OutputIsChange(wallet, output)) {
|
||||
CTxDestination change_dest;
|
||||
ExtractDestination(output.scriptPubKey, change_dest);
|
||||
new_coin_control.destChange = change_dest;
|
||||
new_coin_control.destChange = dest;
|
||||
} else {
|
||||
CRecipient recipient = {output.scriptPubKey, output.nValue, false};
|
||||
CRecipient recipient = {dest, output.nValue, false};
|
||||
recipients.push_back(recipient);
|
||||
}
|
||||
new_outputs_value += output.nValue;
|
||||
@@ -278,7 +278,7 @@ Result CreateRateBumpTransaction(CWallet& wallet, const uint256& txid, const CCo
|
||||
|
||||
// Add change as recipient with SFFO flag enabled, so fees are deduced from it.
|
||||
// If the output differs from the original tx output (because the user customized it) a new change output will be created.
|
||||
recipients.emplace_back(CRecipient{GetScriptForDestination(new_coin_control.destChange), new_outputs_value, /*fSubtractFeeFromAmount=*/true});
|
||||
recipients.emplace_back(CRecipient{new_coin_control.destChange, new_outputs_value, /*fSubtractFeeFromAmount=*/true});
|
||||
new_coin_control.destChange = CNoDestination();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user