@@ -219,6 +219,9 @@ struct PubkeyProvider
219
219
virtual std::optional<CPubKey> GetRootPubKey () const = 0;
220
220
/* * Return the extended public key for this PubkeyProvider, if it has one. */
221
221
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;
222
225
};
223
226
224
227
class OriginPubkeyProvider final : public PubkeyProvider
@@ -280,6 +283,10 @@ class OriginPubkeyProvider final : public PubkeyProvider
280
283
{
281
284
return m_provider->GetRootExtPubKey ();
282
285
}
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
+ }
283
290
};
284
291
285
292
/* * An object representing a parsed constant public key in a descriptor. */
@@ -333,6 +340,10 @@ class ConstPubkeyProvider final : public PubkeyProvider
333
340
{
334
341
return std::nullopt;
335
342
}
343
+ std::unique_ptr<PubkeyProvider> Clone () const override
344
+ {
345
+ return std::make_unique<ConstPubkeyProvider>(m_expr_index, m_pubkey, m_xonly);
346
+ }
336
347
};
337
348
338
349
enum class DeriveType {
@@ -556,6 +567,10 @@ class BIP32PubkeyProvider final : public PubkeyProvider
556
567
{
557
568
return m_root_extkey;
558
569
}
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
+ }
559
574
};
560
575
561
576
/* * Base class for all Descriptor implementations. */
0 commit comments