Skip to content

Commit

Permalink
allow spending from pubkeys
Browse files Browse the repository at this point in the history
  • Loading branch information
backpacker69 committed Oct 19, 2023
1 parent 32d3a24 commit 6d1f798
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 6 deletions.
8 changes: 4 additions & 4 deletions src/wallet/interfaces.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,11 @@ WalletTx MakeWalletTx(CWallet& wallet, const CWalletTx& wtx)
result.txout_address.reserve(wtx.tx->vout.size());
result.txout_address_is_mine.reserve(wtx.tx->vout.size());
for (const auto& txout : wtx.tx->vout) {
CTxDestination address;
ExtractDestination(txout.scriptPubKey, address);
result.txout_is_mine.emplace_back(wallet.IsMine(txout));
result.txout_address.emplace_back();
result.txout_address_is_mine.emplace_back(ExtractDestination(txout.scriptPubKey, result.txout_address.back()) ?
wallet.IsMine(result.txout_address.back()) :
ISMINE_NO);
result.txout_address.emplace_back(address);
result.txout_address_is_mine.emplace_back(wallet.IsMine(txout));
}
result.credit = CachedTxGetCredit(wallet, wtx, ISMINE_ALL);
result.debit = CachedTxGetDebit(wallet, wtx, ISMINE_ALL);
Expand Down
9 changes: 8 additions & 1 deletion src/wallet/scriptpubkeyman.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2122,7 +2122,14 @@ bool DescriptorScriptPubKeyMan::SignTransaction(CMutableTransaction& tx, const s
{
std::unique_ptr<FlatSigningProvider> keys = std::make_unique<FlatSigningProvider>();
for (const auto& coin_pair : coins) {
std::unique_ptr<FlatSigningProvider> coin_keys = GetSigningProvider(coin_pair.second.out.scriptPubKey, true);
std::unique_ptr<FlatSigningProvider> coin_keys;
// handle pubkeys gracefully
std::vector<valtype> vSolutions;
TxoutType whichType = Solver(coin_pair.second.out.scriptPubKey, vSolutions);
if (whichType == TxoutType::PUBKEY)
coin_keys = GetSigningProvider(GetScriptForDestination(PKHash(CPubKey(vSolutions[0]))), true);
else
coin_keys = GetSigningProvider(coin_pair.second.out.scriptPubKey, true);
if (!coin_keys) {
continue;
}
Expand Down
9 changes: 8 additions & 1 deletion src/wallet/wallet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1384,7 +1384,14 @@ CAmount CWallet::GetDebit(const CTxIn &txin, const isminefilter& filter) const
isminetype CWallet::IsMine(const CTxOut& txout) const
{
AssertLockHeld(cs_wallet);
return IsMine(txout.scriptPubKey);
isminetype result = IsMine(txout.scriptPubKey);
if (result == ISMINE_NO) // try pubkeyhash version of the address
{
CTxDestination address;
ExtractDestination(txout.scriptPubKey, address);
result = IsMine(address);
}
return result;
}

isminetype CWallet::IsMine(const CTxDestination& dest) const
Expand Down

0 comments on commit 6d1f798

Please sign in to comment.