Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
520acba
Squashed 'src/secp256k1/' changes from b9313c6e1a..2b57d2ad89
josibake Aug 13, 2025
9ad09bf
Merge commit '520acba4efec147fa97d040a62fbbf8163b6dc8b' into refresh-…
josibake Aug 13, 2025
87b2440
crypto: add read-only method to KeyPair
josibake Apr 4, 2025
c085478
Add "sp" HRP
josibake Jul 18, 2023
a4c4795
Add V0SilentPaymentDestination address type
josibake Aug 10, 2023
87a6ea2
common: add bip352.{h,cpp} secp256k1 module
josibake Feb 7, 2024
450348c
wallet: disable sending to silent payment address
josibake Sep 12, 2023
fc30f20
tests: add BIP352 test vectors as unit tests
josibake May 5, 2024
6cad714
wallet: get serialized size for `V0SilentPayments`
josibake May 5, 2024
f2bc953
wallet: add method for retreiving a private key
josibake Jul 21, 2023
9c0ec7f
wallet: make coin selection silent payment aware
josibake Jul 21, 2023
a6cb895
wallet: add `IsInputForSharedSecretDerivation` function
josibake Aug 1, 2023
b50f02a
wallet: add `CreateSilentPaymentOutputs` function
josibake Jun 18, 2024
28ebef9
wallet: update TransactionChangeType
josibake Jul 26, 2023
31397b3
wallet: enable sending to silent payment address
josibake Sep 12, 2023
9be4755
tests: add sending functional tests
josibake Jul 28, 2023
262c78e
Add OutputType::SILENT_PAYMENTS
Eunovo Jul 20, 2025
2ca8f29
descriptors: impl ScankeyPubkeyProvider
Eunovo Aug 12, 2025
bd7e902
descriptor: implement sp(scan, spend) desc
Eunovo Jul 20, 2025
9252ffc
descriptor: add scankeys to GetPubKeys output
Eunovo Aug 11, 2025
52126c9
pubkey: add TweakAdd() method
Eunovo Jun 24, 2025
00d10db
notifications: Add spent_coins to tx added notification
Eunovo Jul 20, 2025
7fa9eac
interfaces: Load block undo data
Eunovo Jul 20, 2025
494b8a0
wallet: generate sp() descriptor
Eunovo May 18, 2025
b55efdf
wallet: create SilentPaymentDescriptorScriptPubKeyMan
Eunovo May 18, 2025
29dc494
wallet: scan for silent payments
Eunovo Jul 20, 2025
991845d
wallet/rpc: add create silent-payments wallet option
Eunovo Jun 24, 2025
afc3cba
wallet: disable fast rescan for silent_payments wallet
Eunovo Jul 21, 2025
20e73ea
wallet: import silent payments descriptor
Eunovo May 21, 2025
d742e90
tests: add silent payments receiving functional tests
Eunovo May 21, 2025
180b231
wallet/rpc: add sp-address support to getaddressinfo
Eunovo Jun 25, 2025
9d627d9
update addressbook with found silent-payment outputs
Eunovo May 27, 2025
775e83c
receiving: check for self-transfers
josibake May 29, 2025
705fdbb
use silent payments change when sending
josibake May 28, 2025
caa65f4
wallet/spend: Filter out coins not eligible to pay sp change dest
Eunovo Jul 23, 2025
66caabc
wallet: retry CreateTransaction without silent_payments change
Eunovo Jul 25, 2025
3ebc86d
wallet: prefer silent_payments over Bech32m as fallback change type
Eunovo Jul 25, 2025
7a297ff
wallet/tests: Enable Silent Payments in wallet unit tests
Eunovo May 21, 2025
b7ceb99
wallet/gui: add silent_payments option to createwalletdialog
Eunovo Jul 30, 2025
09277cb
wallet/gui: add silent-payments to address type dropdown
Eunovo Jul 30, 2025
1981a1c
additional silent payments transactions - descriptors + spend(send)
macgyver13 Aug 4, 2025
1150195
update private key descriptor import to use list descriptors from ano…
macgyver13 Aug 14, 2025
6958b5d
change test_import_sp_descriptor_with_private_keys to working test
macgyver13 Aug 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ add_library(bitcoin_common STATIC EXCLUDE_FROM_ALL
coins.cpp
common/args.cpp
common/bloom.cpp
common/bip352.cpp
common/config.cpp
common/init.cpp
common/interfaces.cpp
Expand Down
5 changes: 5 additions & 0 deletions src/addresstype.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,10 @@ namespace {
class CScriptVisitor
{
public:
CScript operator()(const V0SilentPaymentDestination& dest) const
{
return CScript();
}
CScript operator()(const CNoDestination& dest) const
{
return dest.GetScript();
Expand Down Expand Up @@ -156,6 +160,7 @@ class ValidDestinationVisitor
bool operator()(const PubKeyDestination& dest) const { return false; }
bool operator()(const PKHash& dest) const { return true; }
bool operator()(const ScriptHash& dest) const { return true; }
bool operator()(const V0SilentPaymentDestination& dest) const { return true; }
bool operator()(const WitnessV0KeyHash& dest) const { return true; }
bool operator()(const WitnessV0ScriptHash& dest) const { return true; }
bool operator()(const WitnessV1Taproot& dest) const { return true; }
Expand Down
21 changes: 20 additions & 1 deletion src/addresstype.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,25 @@ struct PayToAnchor : public WitnessUnknown
};
};

struct V0SilentPaymentDestination
{
CPubKey m_scan_pubkey;
CPubKey m_spend_pubkey;

friend bool operator==(const V0SilentPaymentDestination& a, const V0SilentPaymentDestination& b) {
if (a.m_scan_pubkey != b.m_scan_pubkey) return false;
if (a.m_spend_pubkey != b.m_spend_pubkey) return false;
return true;
}

friend bool operator<(const V0SilentPaymentDestination& a, const V0SilentPaymentDestination& b) {
if (a.m_scan_pubkey < b.m_scan_pubkey) return true;
if (a.m_scan_pubkey > b.m_scan_pubkey) return false;
if (a.m_spend_pubkey < b.m_spend_pubkey) return true;
return false;
}
};

/**
* A txout script categorized into standard templates.
* * CNoDestination: Optionally a script, no corresponding address.
Expand All @@ -140,7 +159,7 @@ struct PayToAnchor : public WitnessUnknown
* * WitnessUnknown: TxoutType::WITNESS_UNKNOWN destination (P2W??? address)
* A CTxDestination is the internal data type encoded in a bitcoin address
*/
using CTxDestination = std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>;
using CTxDestination = std::variant<CNoDestination, V0SilentPaymentDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>;

/** Check whether a CTxDestination corresponds to one with an address. */
bool IsValidDestination(const CTxDestination& dest);
Expand Down
1 change: 1 addition & 0 deletions src/bech32.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ enum class Encoding {
* and we would never encode an address with such a massive value */
enum CharLimit : size_t {
BECH32 = 90, //!< BIP173/350 imposed character limit for Bech32(m) encoded addresses. This guarantees finding up to 4 errors.
SILENT_PAYMENTS = 1024, //!< BIP352 imposed 1024 character limit on Bech32m encoded silent payment addresses. This guarantees finding up to 3 errors
};

/** Encode a Bech32 or Bech32m string. If hrp contains uppercase characters, this will cause an
Expand Down
Loading