Skip to content

Commit

Permalink
descriptors: Add PubkeyProvider::Clone
Browse files Browse the repository at this point in the history
  • Loading branch information
achow101 committed Aug 7, 2024
1 parent 79b8472 commit 7e86541
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/script/descriptor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,9 @@ struct PubkeyProvider
virtual std::optional<CPubKey> GetRootPubKey() const = 0;
/** Return the extended public key for this PubkeyProvider, if it has one. */
virtual std::optional<CExtPubKey> GetRootExtPubKey() const = 0;

/** Make a deep copy of this PubkeyProvider */
virtual std::unique_ptr<PubkeyProvider> Clone() const = 0;
};

class OriginPubkeyProvider final : public PubkeyProvider
Expand Down Expand Up @@ -280,6 +283,10 @@ class OriginPubkeyProvider final : public PubkeyProvider
{
return m_provider->GetRootExtPubKey();
}
std::unique_ptr<PubkeyProvider> Clone() const override
{
return std::make_unique<OriginPubkeyProvider>(m_expr_index, m_origin, m_provider->Clone(), m_apostrophe);
}
};

/** An object representing a parsed constant public key in a descriptor. */
Expand Down Expand Up @@ -333,6 +340,10 @@ class ConstPubkeyProvider final : public PubkeyProvider
{
return std::nullopt;
}
std::unique_ptr<PubkeyProvider> Clone() const override
{
return std::make_unique<ConstPubkeyProvider>(m_expr_index, m_pubkey, m_xonly);
}
};

enum class DeriveType {
Expand Down Expand Up @@ -556,6 +567,10 @@ class BIP32PubkeyProvider final : public PubkeyProvider
{
return m_root_extkey;
}
std::unique_ptr<PubkeyProvider> Clone() const override
{
return std::make_unique<BIP32PubkeyProvider>(m_expr_index, m_root_extkey, m_path, m_derive, m_apostrophe);
}
};

/** Base class for all Descriptor implementations. */
Expand Down

0 comments on commit 7e86541

Please sign in to comment.