Skip to content

Commit 7e86541

Browse files
committed
descriptors: Add PubkeyProvider::Clone
1 parent 79b8472 commit 7e86541

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

src/script/descriptor.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,9 @@ struct PubkeyProvider
219219
virtual std::optional<CPubKey> GetRootPubKey() const = 0;
220220
/** Return the extended public key for this PubkeyProvider, if it has one. */
221221
virtual std::optional<CExtPubKey> GetRootExtPubKey() const = 0;
222+
223+
/** Make a deep copy of this PubkeyProvider */
224+
virtual std::unique_ptr<PubkeyProvider> Clone() const = 0;
222225
};
223226

224227
class OriginPubkeyProvider final : public PubkeyProvider
@@ -280,6 +283,10 @@ class OriginPubkeyProvider final : public PubkeyProvider
280283
{
281284
return m_provider->GetRootExtPubKey();
282285
}
286+
std::unique_ptr<PubkeyProvider> Clone() const override
287+
{
288+
return std::make_unique<OriginPubkeyProvider>(m_expr_index, m_origin, m_provider->Clone(), m_apostrophe);
289+
}
283290
};
284291

285292
/** An object representing a parsed constant public key in a descriptor. */
@@ -333,6 +340,10 @@ class ConstPubkeyProvider final : public PubkeyProvider
333340
{
334341
return std::nullopt;
335342
}
343+
std::unique_ptr<PubkeyProvider> Clone() const override
344+
{
345+
return std::make_unique<ConstPubkeyProvider>(m_expr_index, m_pubkey, m_xonly);
346+
}
336347
};
337348

338349
enum class DeriveType {
@@ -556,6 +567,10 @@ class BIP32PubkeyProvider final : public PubkeyProvider
556567
{
557568
return m_root_extkey;
558569
}
570+
std::unique_ptr<PubkeyProvider> Clone() const override
571+
{
572+
return std::make_unique<BIP32PubkeyProvider>(m_expr_index, m_root_extkey, m_path, m_derive, m_apostrophe);
573+
}
559574
};
560575

561576
/** Base class for all Descriptor implementations. */

0 commit comments

Comments
 (0)