Skip to content

Add apply_block_events and apply_block_connected_to_events - #336

Merged
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events
Nov 5, 2025
Merged

Add apply_block_events and apply_block_connected_to_events#336
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events

Conversation

@tnull

Copy link
Copy Markdown
Contributor

Description

Previously, we added a new Wallet::apply_update_events method that returned WalletEvents. Unfortunately, no corresponding APIs were added for the apply_block counterparts. Here we fix this omission.

Notes to the reviewers

I opened this towards the release-2.2 branch, but it would probably need another release branch. Or let me know if you prefer to open it against master (which seems to be lacking apply_update_events currently though).

I also added no test coverage given that none seems to exist for Wallet::apply_block in the first place. Let me know if I should add something here.

Checklists

All Submissions:

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature

cc @notmandatory

@coveralls

coveralls commented Oct 29, 2025

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 18988009424

Details

  • 34 of 69(49.28%) changed or added relevant lines in 1 file are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage increased (+0.03%) to 85.079%

Changes Missing CoverageCovered LinesChanged/Added Lines%
wallet/src/wallet/mod.rs346949.28%
TotalsCoverage Status
Change from base Build 18951786142:0.03%
Covered Lines:7059
Relevant Lines:8297

💛 - Coveralls

@ValuedMammalValuedMammal moved this to In Progress in BDK WalletOct 29, 2025
@ValuedMammalValuedMammal added this to the Wallet 3.0.0 milestone Oct 29, 2025
@ValuedMammalValuedMammal added the new feature New feature or request label Oct 29, 2025
Comment threadwallet/src/wallet/mod.rs Outdated
block: &Block,
height: u32,
) -> Result<Vec<WalletEvent>, CannotConnectError> {
let connected_to = match height.checked_sub(1) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this. I noticed apply_block_events seems to duplicate logic from apply_block. Could we move the event handling from apply_block_connected_to_events into apply_block_events, then have it call apply_block instead of apply_block_connected_to? Would be more consistent with how apply_update_event works and avoid the duplication.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I intentionally added variants for apply_block as well as for apply_block_connected_to as we may also want to use apply_block_connected_to_events at some point.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Hmm, but that would run the (possibly costly) delta calculation for everybody, even if they wouldn't make use of the events. I believe this is why @notmandatory added separate _event variants of the methods in the first place.

@notmandatorynotmandatoryOct 30, 2025

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In #319 (in v3.0) my plan is to always return events. But for this PR I agree it's best keep the two paths separate so events are only calculated on the _events functions.

@notmandatorynotmandatory mentioned this pull request Oct 29, 2025
3 tasks
@notmandatory

Copy link
Copy Markdown
Member

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Previously, we added a new `Wallet::apply_update_events` method that
returned `WalletEvent`s. Unfortunately, no corresponding APIs were added
for the `apply_block` counterparts. Here we fix this omission.
@tnull
tnullforce-pushed the 2025-10-add-apply-block-events branch from 3039c1b to df444d0CompareOctober 30, 2025 09:37
@tnull

tnull commented Oct 30, 2025

Copy link
Copy Markdown
ContributorAuthor

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Rebased on release/2.2, but still wondering if we'd need a release/2.3 branch for this, given it extends API?

@ValuedMammal
ValuedMammal changed the base branch from release/2.2 to release/2.3October 30, 2025 18:52
@ValuedMammal

Copy link
Copy Markdown
Contributor

ACK I changed the PR to target release/2.3. I agree having a unit test would be nice. I assume we'll need a similar update to #319 .

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this. Other than my suggested change to apply_wallet_events() it looks good to me.

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Comment threadwallet/src/wallet/mod.rs Outdated
@notmandatory

notmandatory commented Oct 30, 2025

Copy link
Copy Markdown
Member

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

@thunderbiscuitthunderbiscuit mentioned this pull request Oct 30, 2025
9 tasks
Co-authored-by: Steve Myers <github@notmandatory.org>
@tnull

tnull commented Oct 31, 2025

Copy link
Copy Markdown
ContributorAuthor

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Yes, if you don't mind feel free to push a test case. I'm generally happy to do it, but given it will be the first one for apply_block API in general, you will have much more context to preset some test approach/design.

Also did minor cleanup of apply_update_events tests.
@notmandatory

notmandatory commented Nov 1, 2025

Copy link
Copy Markdown
Member

I added a few tests for apply_block_events based on the relevant (non-mempool related) tests I made for apply_update_events. I think these are the only ones needed for applying on-chain blocks, but feel free to modify these or add more.

@ValuedMammal
ValuedMammal changed the base branch from release/2.3 to release/2.xNovember 2, 2025 00:10
@ValuedMammal

Copy link
Copy Markdown
Contributor

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

That's a good suggestion.

@ValuedMammalValuedMammal moved this from In Progress to Needs Review in BDK WalletNov 4, 2025

@ValuedMammalValuedMammal left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(self) ACK e9a3034

@notmandatory
notmandatory merged commit abc9cd8 into bitcoindevkit:release/2.xNov 5, 2025
20 checks passed
@github-project-automationgithub-project-automationBot moved this from Needs Review to Done in BDK WalletNov 5, 2025
@ValuedMammalValuedMammal mentioned this pull request Nov 5, 2025
3 tasks
ValuedMammal added a commit that referenced this pull request Feb 6, 2026
…0 milestone)
fcdc006 docs: Add ADR `0003_events.md` (Steve Myers)
acbfb67 test: Add `tests/wallet_events.rs` (Steve Myers)
ec3d1e0 feat(wallet): Add `Wallet::apply_update_events` (Steve Myers)
6467969 feat(wallet): Introduce `WalletEvent` (Steve Myers)
132d4b6 docs: Fix typo (Steve Myers)
Pull request description:
### Description
Cherry-pick of commits from #310 and #336.
### Notes to the reviewers
See #319 (comment) for proposed follow-up work.
### Changelog notice
No changes from `release/2.x` branch.
BREAKING:
- `wallet::event` module is made private. `WalletEvent` can now be imported from the root level.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `just p` before pushing
#### New Features:
* [x] I've added tests for the new feature
* [x] I've added docs for the new feature
* [x] This pull request breaks the existing API
Top commit has no ACKs.
Tree-SHA512: bbe0c48175543413a75b4dc7b5e3a59dd0186aadab08dc8af8f14dcb4a90444bcfece1c3f6fc8474949b98a0e925ad91ef30aae53fefefdcbff55cbb09d64ea1
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new featureNew feature or request

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@tnull@coveralls@notmandatory@ValuedMammal@Camillarhi
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Add `apply_block_events` and `apply_block_connected_to_events` by tnull · Pull Request #336 · bitcoindevkit/bdk_wallet · GitHub
Skip to content

Add apply_block_events and apply_block_connected_to_events - #336

Merged
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events
Nov 5, 2025
Merged

Add apply_block_events and apply_block_connected_to_events#336
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events

Conversation

@tnull

Copy link
Copy Markdown
Contributor

Description

Previously, we added a new Wallet::apply_update_events method that returned WalletEvents. Unfortunately, no corresponding APIs were added for the apply_block counterparts. Here we fix this omission.

Notes to the reviewers

I opened this towards the release-2.2 branch, but it would probably need another release branch. Or let me know if you prefer to open it against master (which seems to be lacking apply_update_events currently though).

I also added no test coverage given that none seems to exist for Wallet::apply_block in the first place. Let me know if I should add something here.

Checklists

All Submissions:

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature

cc @notmandatory

@coveralls

coveralls commented Oct 29, 2025

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 18988009424

Details

  • 34 of 69(49.28%) changed or added relevant lines in 1 file are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage increased (+0.03%) to 85.079%

Changes Missing CoverageCovered LinesChanged/Added Lines%
wallet/src/wallet/mod.rs346949.28%
TotalsCoverage Status
Change from base Build 18951786142:0.03%
Covered Lines:7059
Relevant Lines:8297

💛 - Coveralls

@ValuedMammalValuedMammal moved this to In Progress in BDK WalletOct 29, 2025
@ValuedMammalValuedMammal added this to the Wallet 3.0.0 milestone Oct 29, 2025
@ValuedMammalValuedMammal added the new feature New feature or request label Oct 29, 2025
Comment threadwallet/src/wallet/mod.rs Outdated
block: &Block,
height: u32,
) -> Result<Vec<WalletEvent>, CannotConnectError> {
let connected_to = match height.checked_sub(1) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this. I noticed apply_block_events seems to duplicate logic from apply_block. Could we move the event handling from apply_block_connected_to_events into apply_block_events, then have it call apply_block instead of apply_block_connected_to? Would be more consistent with how apply_update_event works and avoid the duplication.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I intentionally added variants for apply_block as well as for apply_block_connected_to as we may also want to use apply_block_connected_to_events at some point.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Hmm, but that would run the (possibly costly) delta calculation for everybody, even if they wouldn't make use of the events. I believe this is why @notmandatory added separate _event variants of the methods in the first place.

@notmandatorynotmandatoryOct 30, 2025

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In #319 (in v3.0) my plan is to always return events. But for this PR I agree it's best keep the two paths separate so events are only calculated on the _events functions.

@notmandatorynotmandatory mentioned this pull request Oct 29, 2025
3 tasks
@notmandatory

Copy link
Copy Markdown
Member

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Previously, we added a new `Wallet::apply_update_events` method that
returned `WalletEvent`s. Unfortunately, no corresponding APIs were added
for the `apply_block` counterparts. Here we fix this omission.
@tnull
tnullforce-pushed the 2025-10-add-apply-block-events branch from 3039c1b to df444d0CompareOctober 30, 2025 09:37
@tnull

tnull commented Oct 30, 2025

Copy link
Copy Markdown
ContributorAuthor

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Rebased on release/2.2, but still wondering if we'd need a release/2.3 branch for this, given it extends API?

@ValuedMammal
ValuedMammal changed the base branch from release/2.2 to release/2.3October 30, 2025 18:52
@ValuedMammal

Copy link
Copy Markdown
Contributor

ACK I changed the PR to target release/2.3. I agree having a unit test would be nice. I assume we'll need a similar update to #319 .

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this. Other than my suggested change to apply_wallet_events() it looks good to me.

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Comment threadwallet/src/wallet/mod.rs Outdated
@notmandatory

notmandatory commented Oct 30, 2025

Copy link
Copy Markdown
Member

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

@thunderbiscuitthunderbiscuit mentioned this pull request Oct 30, 2025
9 tasks
Co-authored-by: Steve Myers <github@notmandatory.org>
@tnull

tnull commented Oct 31, 2025

Copy link
Copy Markdown
ContributorAuthor

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Yes, if you don't mind feel free to push a test case. I'm generally happy to do it, but given it will be the first one for apply_block API in general, you will have much more context to preset some test approach/design.

Also did minor cleanup of apply_update_events tests.
@notmandatory

notmandatory commented Nov 1, 2025

Copy link
Copy Markdown
Member

I added a few tests for apply_block_events based on the relevant (non-mempool related) tests I made for apply_update_events. I think these are the only ones needed for applying on-chain blocks, but feel free to modify these or add more.

@ValuedMammal
ValuedMammal changed the base branch from release/2.3 to release/2.xNovember 2, 2025 00:10
@ValuedMammal

Copy link
Copy Markdown
Contributor

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

That's a good suggestion.

@ValuedMammalValuedMammal moved this from In Progress to Needs Review in BDK WalletNov 4, 2025

@ValuedMammalValuedMammal left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(self) ACK e9a3034

@notmandatory
notmandatory merged commit abc9cd8 into bitcoindevkit:release/2.xNov 5, 2025
20 checks passed
@github-project-automationgithub-project-automationBot moved this from Needs Review to Done in BDK WalletNov 5, 2025
@ValuedMammalValuedMammal mentioned this pull request Nov 5, 2025
3 tasks
ValuedMammal added a commit that referenced this pull request Feb 6, 2026
…0 milestone)
fcdc006 docs: Add ADR `0003_events.md` (Steve Myers)
acbfb67 test: Add `tests/wallet_events.rs` (Steve Myers)
ec3d1e0 feat(wallet): Add `Wallet::apply_update_events` (Steve Myers)
6467969 feat(wallet): Introduce `WalletEvent` (Steve Myers)
132d4b6 docs: Fix typo (Steve Myers)
Pull request description:
### Description
Cherry-pick of commits from #310 and #336.
### Notes to the reviewers
See #319 (comment) for proposed follow-up work.
### Changelog notice
No changes from `release/2.x` branch.
BREAKING:
- `wallet::event` module is made private. `WalletEvent` can now be imported from the root level.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `just p` before pushing
#### New Features:
* [x] I've added tests for the new feature
* [x] I've added docs for the new feature
* [x] This pull request breaks the existing API
Top commit has no ACKs.
Tree-SHA512: bbe0c48175543413a75b4dc7b5e3a59dd0186aadab08dc8af8f14dcb4a90444bcfece1c3f6fc8474949b98a0e925ad91ef30aae53fefefdcbff55cbb09d64ea1
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new featureNew feature or request

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@tnull@coveralls@notmandatory@ValuedMammal@Camillarhi
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add `apply_block_events` and `apply_block_connected_to_events` by tnull · Pull Request #336 · bitcoindevkit/bdk_wallet · GitHub
Skip to content

Add apply_block_events and apply_block_connected_to_events - #336

Merged
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events
Nov 5, 2025
Merged

Add apply_block_events and apply_block_connected_to_events#336
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events

Conversation

@tnull

Copy link
Copy Markdown
Contributor

Description

Previously, we added a new Wallet::apply_update_events method that returned WalletEvents. Unfortunately, no corresponding APIs were added for the apply_block counterparts. Here we fix this omission.

Notes to the reviewers

I opened this towards the release-2.2 branch, but it would probably need another release branch. Or let me know if you prefer to open it against master (which seems to be lacking apply_update_events currently though).

I also added no test coverage given that none seems to exist for Wallet::apply_block in the first place. Let me know if I should add something here.

Checklists

All Submissions:

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature

cc @notmandatory

@coveralls

coveralls commented Oct 29, 2025

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 18988009424

Details

  • 34 of 69(49.28%) changed or added relevant lines in 1 file are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage increased (+0.03%) to 85.079%

Changes Missing CoverageCovered LinesChanged/Added Lines%
wallet/src/wallet/mod.rs346949.28%
TotalsCoverage Status
Change from base Build 18951786142:0.03%
Covered Lines:7059
Relevant Lines:8297

💛 - Coveralls

@ValuedMammalValuedMammal moved this to In Progress in BDK WalletOct 29, 2025
@ValuedMammalValuedMammal added this to the Wallet 3.0.0 milestone Oct 29, 2025
@ValuedMammalValuedMammal added the new feature New feature or request label Oct 29, 2025
Comment threadwallet/src/wallet/mod.rs Outdated
block: &Block,
height: u32,
) -> Result<Vec<WalletEvent>, CannotConnectError> {
let connected_to = match height.checked_sub(1) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this. I noticed apply_block_events seems to duplicate logic from apply_block. Could we move the event handling from apply_block_connected_to_events into apply_block_events, then have it call apply_block instead of apply_block_connected_to? Would be more consistent with how apply_update_event works and avoid the duplication.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I intentionally added variants for apply_block as well as for apply_block_connected_to as we may also want to use apply_block_connected_to_events at some point.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Hmm, but that would run the (possibly costly) delta calculation for everybody, even if they wouldn't make use of the events. I believe this is why @notmandatory added separate _event variants of the methods in the first place.

@notmandatorynotmandatoryOct 30, 2025

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In #319 (in v3.0) my plan is to always return events. But for this PR I agree it's best keep the two paths separate so events are only calculated on the _events functions.

@notmandatorynotmandatory mentioned this pull request Oct 29, 2025
3 tasks
@notmandatory

Copy link
Copy Markdown
Member

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Previously, we added a new `Wallet::apply_update_events` method that
returned `WalletEvent`s. Unfortunately, no corresponding APIs were added
for the `apply_block` counterparts. Here we fix this omission.
@tnull
tnullforce-pushed the 2025-10-add-apply-block-events branch from 3039c1b to df444d0CompareOctober 30, 2025 09:37
@tnull

tnull commented Oct 30, 2025

Copy link
Copy Markdown
ContributorAuthor

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Rebased on release/2.2, but still wondering if we'd need a release/2.3 branch for this, given it extends API?

@ValuedMammal
ValuedMammal changed the base branch from release/2.2 to release/2.3October 30, 2025 18:52
@ValuedMammal

Copy link
Copy Markdown
Contributor

ACK I changed the PR to target release/2.3. I agree having a unit test would be nice. I assume we'll need a similar update to #319 .

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this. Other than my suggested change to apply_wallet_events() it looks good to me.

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Comment threadwallet/src/wallet/mod.rs Outdated
@notmandatory

notmandatory commented Oct 30, 2025

Copy link
Copy Markdown
Member

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

@thunderbiscuitthunderbiscuit mentioned this pull request Oct 30, 2025
9 tasks
Co-authored-by: Steve Myers <github@notmandatory.org>
@tnull

tnull commented Oct 31, 2025

Copy link
Copy Markdown
ContributorAuthor

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Yes, if you don't mind feel free to push a test case. I'm generally happy to do it, but given it will be the first one for apply_block API in general, you will have much more context to preset some test approach/design.

Also did minor cleanup of apply_update_events tests.
@notmandatory

notmandatory commented Nov 1, 2025

Copy link
Copy Markdown
Member

I added a few tests for apply_block_events based on the relevant (non-mempool related) tests I made for apply_update_events. I think these are the only ones needed for applying on-chain blocks, but feel free to modify these or add more.

@ValuedMammal
ValuedMammal changed the base branch from release/2.3 to release/2.xNovember 2, 2025 00:10
@ValuedMammal

Copy link
Copy Markdown
Contributor

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

That's a good suggestion.

@ValuedMammalValuedMammal moved this from In Progress to Needs Review in BDK WalletNov 4, 2025

@ValuedMammalValuedMammal left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(self) ACK e9a3034

@notmandatory
notmandatory merged commit abc9cd8 into bitcoindevkit:release/2.xNov 5, 2025
20 checks passed
@github-project-automationgithub-project-automationBot moved this from Needs Review to Done in BDK WalletNov 5, 2025
@ValuedMammalValuedMammal mentioned this pull request Nov 5, 2025
3 tasks
ValuedMammal added a commit that referenced this pull request Feb 6, 2026
…0 milestone)
fcdc006 docs: Add ADR `0003_events.md` (Steve Myers)
acbfb67 test: Add `tests/wallet_events.rs` (Steve Myers)
ec3d1e0 feat(wallet): Add `Wallet::apply_update_events` (Steve Myers)
6467969 feat(wallet): Introduce `WalletEvent` (Steve Myers)
132d4b6 docs: Fix typo (Steve Myers)
Pull request description:
### Description
Cherry-pick of commits from #310 and #336.
### Notes to the reviewers
See #319 (comment) for proposed follow-up work.
### Changelog notice
No changes from `release/2.x` branch.
BREAKING:
- `wallet::event` module is made private. `WalletEvent` can now be imported from the root level.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `just p` before pushing
#### New Features:
* [x] I've added tests for the new feature
* [x] I've added docs for the new feature
* [x] This pull request breaks the existing API
Top commit has no ACKs.
Tree-SHA512: bbe0c48175543413a75b4dc7b5e3a59dd0186aadab08dc8af8f14dcb4a90444bcfece1c3f6fc8474949b98a0e925ad91ef30aae53fefefdcbff55cbb09d64ea1
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new featureNew feature or request

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@tnull@coveralls@notmandatory@ValuedMammal@Camillarhi
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add `apply_block_events` and `apply_block_connected_to_events` by tnull · Pull Request #336 · bitcoindevkit/bdk_wallet · GitHub
Skip to content

Add apply_block_events and apply_block_connected_to_events - #336

Merged
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events
Nov 5, 2025
Merged

Add apply_block_events and apply_block_connected_to_events#336
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events

Conversation

@tnull

Copy link
Copy Markdown
Contributor

Description

Previously, we added a new Wallet::apply_update_events method that returned WalletEvents. Unfortunately, no corresponding APIs were added for the apply_block counterparts. Here we fix this omission.

Notes to the reviewers

I opened this towards the release-2.2 branch, but it would probably need another release branch. Or let me know if you prefer to open it against master (which seems to be lacking apply_update_events currently though).

I also added no test coverage given that none seems to exist for Wallet::apply_block in the first place. Let me know if I should add something here.

Checklists

All Submissions:

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature

cc @notmandatory

@coveralls

coveralls commented Oct 29, 2025

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 18988009424

Details

  • 34 of 69(49.28%) changed or added relevant lines in 1 file are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage increased (+0.03%) to 85.079%

Changes Missing CoverageCovered LinesChanged/Added Lines%
wallet/src/wallet/mod.rs346949.28%
TotalsCoverage Status
Change from base Build 18951786142:0.03%
Covered Lines:7059
Relevant Lines:8297

💛 - Coveralls

@ValuedMammalValuedMammal moved this to In Progress in BDK WalletOct 29, 2025
@ValuedMammalValuedMammal added this to the Wallet 3.0.0 milestone Oct 29, 2025
@ValuedMammalValuedMammal added the new feature New feature or request label Oct 29, 2025
Comment threadwallet/src/wallet/mod.rs Outdated
block: &Block,
height: u32,
) -> Result<Vec<WalletEvent>, CannotConnectError> {
let connected_to = match height.checked_sub(1) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this. I noticed apply_block_events seems to duplicate logic from apply_block. Could we move the event handling from apply_block_connected_to_events into apply_block_events, then have it call apply_block instead of apply_block_connected_to? Would be more consistent with how apply_update_event works and avoid the duplication.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I intentionally added variants for apply_block as well as for apply_block_connected_to as we may also want to use apply_block_connected_to_events at some point.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Hmm, but that would run the (possibly costly) delta calculation for everybody, even if they wouldn't make use of the events. I believe this is why @notmandatory added separate _event variants of the methods in the first place.

@notmandatorynotmandatoryOct 30, 2025

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In #319 (in v3.0) my plan is to always return events. But for this PR I agree it's best keep the two paths separate so events are only calculated on the _events functions.

@notmandatorynotmandatory mentioned this pull request Oct 29, 2025
3 tasks
@notmandatory

Copy link
Copy Markdown
Member

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Previously, we added a new `Wallet::apply_update_events` method that
returned `WalletEvent`s. Unfortunately, no corresponding APIs were added
for the `apply_block` counterparts. Here we fix this omission.
@tnull
tnullforce-pushed the 2025-10-add-apply-block-events branch from 3039c1b to df444d0CompareOctober 30, 2025 09:37
@tnull

tnull commented Oct 30, 2025

Copy link
Copy Markdown
ContributorAuthor

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Rebased on release/2.2, but still wondering if we'd need a release/2.3 branch for this, given it extends API?

@ValuedMammal
ValuedMammal changed the base branch from release/2.2 to release/2.3October 30, 2025 18:52
@ValuedMammal

Copy link
Copy Markdown
Contributor

ACK I changed the PR to target release/2.3. I agree having a unit test would be nice. I assume we'll need a similar update to #319 .

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this. Other than my suggested change to apply_wallet_events() it looks good to me.

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Comment threadwallet/src/wallet/mod.rs Outdated
@notmandatory

notmandatory commented Oct 30, 2025

Copy link
Copy Markdown
Member

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

@thunderbiscuitthunderbiscuit mentioned this pull request Oct 30, 2025
9 tasks
Co-authored-by: Steve Myers <github@notmandatory.org>
@tnull

tnull commented Oct 31, 2025

Copy link
Copy Markdown
ContributorAuthor

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Yes, if you don't mind feel free to push a test case. I'm generally happy to do it, but given it will be the first one for apply_block API in general, you will have much more context to preset some test approach/design.

Also did minor cleanup of apply_update_events tests.
@notmandatory

notmandatory commented Nov 1, 2025

Copy link
Copy Markdown
Member

I added a few tests for apply_block_events based on the relevant (non-mempool related) tests I made for apply_update_events. I think these are the only ones needed for applying on-chain blocks, but feel free to modify these or add more.

@ValuedMammal
ValuedMammal changed the base branch from release/2.3 to release/2.xNovember 2, 2025 00:10
@ValuedMammal

Copy link
Copy Markdown
Contributor

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

That's a good suggestion.

@ValuedMammalValuedMammal moved this from In Progress to Needs Review in BDK WalletNov 4, 2025

@ValuedMammalValuedMammal left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(self) ACK e9a3034

@notmandatory
notmandatory merged commit abc9cd8 into bitcoindevkit:release/2.xNov 5, 2025
20 checks passed
@github-project-automationgithub-project-automationBot moved this from Needs Review to Done in BDK WalletNov 5, 2025
@ValuedMammalValuedMammal mentioned this pull request Nov 5, 2025
3 tasks
ValuedMammal added a commit that referenced this pull request Feb 6, 2026
…0 milestone)
fcdc006 docs: Add ADR `0003_events.md` (Steve Myers)
acbfb67 test: Add `tests/wallet_events.rs` (Steve Myers)
ec3d1e0 feat(wallet): Add `Wallet::apply_update_events` (Steve Myers)
6467969 feat(wallet): Introduce `WalletEvent` (Steve Myers)
132d4b6 docs: Fix typo (Steve Myers)
Pull request description:
### Description
Cherry-pick of commits from #310 and #336.
### Notes to the reviewers
See #319 (comment) for proposed follow-up work.
### Changelog notice
No changes from `release/2.x` branch.
BREAKING:
- `wallet::event` module is made private. `WalletEvent` can now be imported from the root level.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `just p` before pushing
#### New Features:
* [x] I've added tests for the new feature
* [x] I've added docs for the new feature
* [x] This pull request breaks the existing API
Top commit has no ACKs.
Tree-SHA512: bbe0c48175543413a75b4dc7b5e3a59dd0186aadab08dc8af8f14dcb4a90444bcfece1c3f6fc8474949b98a0e925ad91ef30aae53fefefdcbff55cbb09d64ea1
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new featureNew feature or request

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@tnull@coveralls@notmandatory@ValuedMammal@Camillarhi
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Add `apply_block_events` and `apply_block_connected_to_events` by tnull · Pull Request #336 · bitcoindevkit/bdk_wallet · GitHub
Skip to content

Add apply_block_events and apply_block_connected_to_events - #336

Merged
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events
Nov 5, 2025
Merged

Add apply_block_events and apply_block_connected_to_events#336
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events

Conversation

@tnull

Copy link
Copy Markdown
Contributor

Description

Previously, we added a new Wallet::apply_update_events method that returned WalletEvents. Unfortunately, no corresponding APIs were added for the apply_block counterparts. Here we fix this omission.

Notes to the reviewers

I opened this towards the release-2.2 branch, but it would probably need another release branch. Or let me know if you prefer to open it against master (which seems to be lacking apply_update_events currently though).

I also added no test coverage given that none seems to exist for Wallet::apply_block in the first place. Let me know if I should add something here.

Checklists

All Submissions:

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature

cc @notmandatory

@coveralls

coveralls commented Oct 29, 2025

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 18988009424

Details

  • 34 of 69(49.28%) changed or added relevant lines in 1 file are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage increased (+0.03%) to 85.079%

Changes Missing CoverageCovered LinesChanged/Added Lines%
wallet/src/wallet/mod.rs346949.28%
TotalsCoverage Status
Change from base Build 18951786142:0.03%
Covered Lines:7059
Relevant Lines:8297

💛 - Coveralls

@ValuedMammalValuedMammal moved this to In Progress in BDK WalletOct 29, 2025
@ValuedMammalValuedMammal added this to the Wallet 3.0.0 milestone Oct 29, 2025
@ValuedMammalValuedMammal added the new feature New feature or request label Oct 29, 2025
Comment threadwallet/src/wallet/mod.rs Outdated
block: &Block,
height: u32,
) -> Result<Vec<WalletEvent>, CannotConnectError> {
let connected_to = match height.checked_sub(1) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this. I noticed apply_block_events seems to duplicate logic from apply_block. Could we move the event handling from apply_block_connected_to_events into apply_block_events, then have it call apply_block instead of apply_block_connected_to? Would be more consistent with how apply_update_event works and avoid the duplication.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I intentionally added variants for apply_block as well as for apply_block_connected_to as we may also want to use apply_block_connected_to_events at some point.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Hmm, but that would run the (possibly costly) delta calculation for everybody, even if they wouldn't make use of the events. I believe this is why @notmandatory added separate _event variants of the methods in the first place.

@notmandatorynotmandatoryOct 30, 2025

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In #319 (in v3.0) my plan is to always return events. But for this PR I agree it's best keep the two paths separate so events are only calculated on the _events functions.

@notmandatorynotmandatory mentioned this pull request Oct 29, 2025
3 tasks
@notmandatory

Copy link
Copy Markdown
Member

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Previously, we added a new `Wallet::apply_update_events` method that
returned `WalletEvent`s. Unfortunately, no corresponding APIs were added
for the `apply_block` counterparts. Here we fix this omission.
@tnull
tnullforce-pushed the 2025-10-add-apply-block-events branch from 3039c1b to df444d0CompareOctober 30, 2025 09:37
@tnull

tnull commented Oct 30, 2025

Copy link
Copy Markdown
ContributorAuthor

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Rebased on release/2.2, but still wondering if we'd need a release/2.3 branch for this, given it extends API?

@ValuedMammal
ValuedMammal changed the base branch from release/2.2 to release/2.3October 30, 2025 18:52
@ValuedMammal

Copy link
Copy Markdown
Contributor

ACK I changed the PR to target release/2.3. I agree having a unit test would be nice. I assume we'll need a similar update to #319 .

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this. Other than my suggested change to apply_wallet_events() it looks good to me.

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Comment threadwallet/src/wallet/mod.rs Outdated
@notmandatory

notmandatory commented Oct 30, 2025

Copy link
Copy Markdown
Member

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

@thunderbiscuitthunderbiscuit mentioned this pull request Oct 30, 2025
9 tasks
Co-authored-by: Steve Myers <github@notmandatory.org>
@tnull

tnull commented Oct 31, 2025

Copy link
Copy Markdown
ContributorAuthor

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Yes, if you don't mind feel free to push a test case. I'm generally happy to do it, but given it will be the first one for apply_block API in general, you will have much more context to preset some test approach/design.

Also did minor cleanup of apply_update_events tests.
@notmandatory

notmandatory commented Nov 1, 2025

Copy link
Copy Markdown
Member

I added a few tests for apply_block_events based on the relevant (non-mempool related) tests I made for apply_update_events. I think these are the only ones needed for applying on-chain blocks, but feel free to modify these or add more.

@ValuedMammal
ValuedMammal changed the base branch from release/2.3 to release/2.xNovember 2, 2025 00:10
@ValuedMammal

Copy link
Copy Markdown
Contributor

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

That's a good suggestion.

@ValuedMammalValuedMammal moved this from In Progress to Needs Review in BDK WalletNov 4, 2025

@ValuedMammalValuedMammal left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(self) ACK e9a3034

@notmandatory
notmandatory merged commit abc9cd8 into bitcoindevkit:release/2.xNov 5, 2025
20 checks passed
@github-project-automationgithub-project-automationBot moved this from Needs Review to Done in BDK WalletNov 5, 2025
@ValuedMammalValuedMammal mentioned this pull request Nov 5, 2025
3 tasks
ValuedMammal added a commit that referenced this pull request Feb 6, 2026
…0 milestone)
fcdc006 docs: Add ADR `0003_events.md` (Steve Myers)
acbfb67 test: Add `tests/wallet_events.rs` (Steve Myers)
ec3d1e0 feat(wallet): Add `Wallet::apply_update_events` (Steve Myers)
6467969 feat(wallet): Introduce `WalletEvent` (Steve Myers)
132d4b6 docs: Fix typo (Steve Myers)
Pull request description:
### Description
Cherry-pick of commits from #310 and #336.
### Notes to the reviewers
See #319 (comment) for proposed follow-up work.
### Changelog notice
No changes from `release/2.x` branch.
BREAKING:
- `wallet::event` module is made private. `WalletEvent` can now be imported from the root level.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `just p` before pushing
#### New Features:
* [x] I've added tests for the new feature
* [x] I've added docs for the new feature
* [x] This pull request breaks the existing API
Top commit has no ACKs.
Tree-SHA512: bbe0c48175543413a75b4dc7b5e3a59dd0186aadab08dc8af8f14dcb4a90444bcfece1c3f6fc8474949b98a0e925ad91ef30aae53fefefdcbff55cbb09d64ea1
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new featureNew feature or request

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@tnull@coveralls@notmandatory@ValuedMammal@Camillarhi
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add `apply_block_events` and `apply_block_connected_to_events` by tnull · Pull Request #336 · bitcoindevkit/bdk_wallet · GitHub
Skip to content

Add apply_block_events and apply_block_connected_to_events - #336

Merged
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events
Nov 5, 2025
Merged

Add apply_block_events and apply_block_connected_to_events#336
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events

Conversation

@tnull

Copy link
Copy Markdown
Contributor

Description

Previously, we added a new Wallet::apply_update_events method that returned WalletEvents. Unfortunately, no corresponding APIs were added for the apply_block counterparts. Here we fix this omission.

Notes to the reviewers

I opened this towards the release-2.2 branch, but it would probably need another release branch. Or let me know if you prefer to open it against master (which seems to be lacking apply_update_events currently though).

I also added no test coverage given that none seems to exist for Wallet::apply_block in the first place. Let me know if I should add something here.

Checklists

All Submissions:

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature

cc @notmandatory

@coveralls

coveralls commented Oct 29, 2025

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 18988009424

Details

  • 34 of 69(49.28%) changed or added relevant lines in 1 file are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage increased (+0.03%) to 85.079%

Changes Missing CoverageCovered LinesChanged/Added Lines%
wallet/src/wallet/mod.rs346949.28%
TotalsCoverage Status
Change from base Build 18951786142:0.03%
Covered Lines:7059
Relevant Lines:8297

💛 - Coveralls

@ValuedMammalValuedMammal moved this to In Progress in BDK WalletOct 29, 2025
@ValuedMammalValuedMammal added this to the Wallet 3.0.0 milestone Oct 29, 2025
@ValuedMammalValuedMammal added the new feature New feature or request label Oct 29, 2025
Comment threadwallet/src/wallet/mod.rs Outdated
block: &Block,
height: u32,
) -> Result<Vec<WalletEvent>, CannotConnectError> {
let connected_to = match height.checked_sub(1) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this. I noticed apply_block_events seems to duplicate logic from apply_block. Could we move the event handling from apply_block_connected_to_events into apply_block_events, then have it call apply_block instead of apply_block_connected_to? Would be more consistent with how apply_update_event works and avoid the duplication.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I intentionally added variants for apply_block as well as for apply_block_connected_to as we may also want to use apply_block_connected_to_events at some point.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Hmm, but that would run the (possibly costly) delta calculation for everybody, even if they wouldn't make use of the events. I believe this is why @notmandatory added separate _event variants of the methods in the first place.

@notmandatorynotmandatoryOct 30, 2025

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In #319 (in v3.0) my plan is to always return events. But for this PR I agree it's best keep the two paths separate so events are only calculated on the _events functions.

@notmandatorynotmandatory mentioned this pull request Oct 29, 2025
3 tasks
@notmandatory

Copy link
Copy Markdown
Member

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Previously, we added a new `Wallet::apply_update_events` method that
returned `WalletEvent`s. Unfortunately, no corresponding APIs were added
for the `apply_block` counterparts. Here we fix this omission.
@tnull
tnullforce-pushed the 2025-10-add-apply-block-events branch from 3039c1b to df444d0CompareOctober 30, 2025 09:37
@tnull

tnull commented Oct 30, 2025

Copy link
Copy Markdown
ContributorAuthor

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Rebased on release/2.2, but still wondering if we'd need a release/2.3 branch for this, given it extends API?

@ValuedMammal
ValuedMammal changed the base branch from release/2.2 to release/2.3October 30, 2025 18:52
@ValuedMammal

Copy link
Copy Markdown
Contributor

ACK I changed the PR to target release/2.3. I agree having a unit test would be nice. I assume we'll need a similar update to #319 .

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this. Other than my suggested change to apply_wallet_events() it looks good to me.

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Comment threadwallet/src/wallet/mod.rs Outdated
@notmandatory

notmandatory commented Oct 30, 2025

Copy link
Copy Markdown
Member

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

@thunderbiscuitthunderbiscuit mentioned this pull request Oct 30, 2025
9 tasks
Co-authored-by: Steve Myers <github@notmandatory.org>
@tnull

tnull commented Oct 31, 2025

Copy link
Copy Markdown
ContributorAuthor

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Yes, if you don't mind feel free to push a test case. I'm generally happy to do it, but given it will be the first one for apply_block API in general, you will have much more context to preset some test approach/design.

Also did minor cleanup of apply_update_events tests.
@notmandatory

notmandatory commented Nov 1, 2025

Copy link
Copy Markdown
Member

I added a few tests for apply_block_events based on the relevant (non-mempool related) tests I made for apply_update_events. I think these are the only ones needed for applying on-chain blocks, but feel free to modify these or add more.

@ValuedMammal
ValuedMammal changed the base branch from release/2.3 to release/2.xNovember 2, 2025 00:10
@ValuedMammal

Copy link
Copy Markdown
Contributor

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

That's a good suggestion.

@ValuedMammalValuedMammal moved this from In Progress to Needs Review in BDK WalletNov 4, 2025

@ValuedMammalValuedMammal left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(self) ACK e9a3034

@notmandatory
notmandatory merged commit abc9cd8 into bitcoindevkit:release/2.xNov 5, 2025
20 checks passed
@github-project-automationgithub-project-automationBot moved this from Needs Review to Done in BDK WalletNov 5, 2025
@ValuedMammalValuedMammal mentioned this pull request Nov 5, 2025
3 tasks
ValuedMammal added a commit that referenced this pull request Feb 6, 2026
…0 milestone)
fcdc006 docs: Add ADR `0003_events.md` (Steve Myers)
acbfb67 test: Add `tests/wallet_events.rs` (Steve Myers)
ec3d1e0 feat(wallet): Add `Wallet::apply_update_events` (Steve Myers)
6467969 feat(wallet): Introduce `WalletEvent` (Steve Myers)
132d4b6 docs: Fix typo (Steve Myers)
Pull request description:
### Description
Cherry-pick of commits from #310 and #336.
### Notes to the reviewers
See #319 (comment) for proposed follow-up work.
### Changelog notice
No changes from `release/2.x` branch.
BREAKING:
- `wallet::event` module is made private. `WalletEvent` can now be imported from the root level.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `just p` before pushing
#### New Features:
* [x] I've added tests for the new feature
* [x] I've added docs for the new feature
* [x] This pull request breaks the existing API
Top commit has no ACKs.
Tree-SHA512: bbe0c48175543413a75b4dc7b5e3a59dd0186aadab08dc8af8f14dcb4a90444bcfece1c3f6fc8474949b98a0e925ad91ef30aae53fefefdcbff55cbb09d64ea1
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new featureNew feature or request

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@tnull@coveralls@notmandatory@ValuedMammal@Camillarhi
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add `apply_block_events` and `apply_block_connected_to_events` by tnull · Pull Request #336 · bitcoindevkit/bdk_wallet · GitHub
Skip to content

Add apply_block_events and apply_block_connected_to_events - #336

Merged
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events
Nov 5, 2025
Merged

Add apply_block_events and apply_block_connected_to_events#336
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events

Conversation

@tnull

Copy link
Copy Markdown
Contributor

Description

Previously, we added a new Wallet::apply_update_events method that returned WalletEvents. Unfortunately, no corresponding APIs were added for the apply_block counterparts. Here we fix this omission.

Notes to the reviewers

I opened this towards the release-2.2 branch, but it would probably need another release branch. Or let me know if you prefer to open it against master (which seems to be lacking apply_update_events currently though).

I also added no test coverage given that none seems to exist for Wallet::apply_block in the first place. Let me know if I should add something here.

Checklists

All Submissions:

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature

cc @notmandatory

@coveralls

coveralls commented Oct 29, 2025

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 18988009424

Details

  • 34 of 69(49.28%) changed or added relevant lines in 1 file are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage increased (+0.03%) to 85.079%

Changes Missing CoverageCovered LinesChanged/Added Lines%
wallet/src/wallet/mod.rs346949.28%
TotalsCoverage Status
Change from base Build 18951786142:0.03%
Covered Lines:7059
Relevant Lines:8297

💛 - Coveralls

@ValuedMammalValuedMammal moved this to In Progress in BDK WalletOct 29, 2025
@ValuedMammalValuedMammal added this to the Wallet 3.0.0 milestone Oct 29, 2025
@ValuedMammalValuedMammal added the new feature New feature or request label Oct 29, 2025
Comment threadwallet/src/wallet/mod.rs Outdated
block: &Block,
height: u32,
) -> Result<Vec<WalletEvent>, CannotConnectError> {
let connected_to = match height.checked_sub(1) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this. I noticed apply_block_events seems to duplicate logic from apply_block. Could we move the event handling from apply_block_connected_to_events into apply_block_events, then have it call apply_block instead of apply_block_connected_to? Would be more consistent with how apply_update_event works and avoid the duplication.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I intentionally added variants for apply_block as well as for apply_block_connected_to as we may also want to use apply_block_connected_to_events at some point.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Hmm, but that would run the (possibly costly) delta calculation for everybody, even if they wouldn't make use of the events. I believe this is why @notmandatory added separate _event variants of the methods in the first place.

@notmandatorynotmandatoryOct 30, 2025

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In #319 (in v3.0) my plan is to always return events. But for this PR I agree it's best keep the two paths separate so events are only calculated on the _events functions.

@notmandatorynotmandatory mentioned this pull request Oct 29, 2025
3 tasks
@notmandatory

Copy link
Copy Markdown
Member

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Previously, we added a new `Wallet::apply_update_events` method that
returned `WalletEvent`s. Unfortunately, no corresponding APIs were added
for the `apply_block` counterparts. Here we fix this omission.
@tnull
tnullforce-pushed the 2025-10-add-apply-block-events branch from 3039c1b to df444d0CompareOctober 30, 2025 09:37
@tnull

tnull commented Oct 30, 2025

Copy link
Copy Markdown
ContributorAuthor

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Rebased on release/2.2, but still wondering if we'd need a release/2.3 branch for this, given it extends API?

@ValuedMammal
ValuedMammal changed the base branch from release/2.2 to release/2.3October 30, 2025 18:52
@ValuedMammal

Copy link
Copy Markdown
Contributor

ACK I changed the PR to target release/2.3. I agree having a unit test would be nice. I assume we'll need a similar update to #319 .

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this. Other than my suggested change to apply_wallet_events() it looks good to me.

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Comment threadwallet/src/wallet/mod.rs Outdated
@notmandatory

notmandatory commented Oct 30, 2025

Copy link
Copy Markdown
Member

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

@thunderbiscuitthunderbiscuit mentioned this pull request Oct 30, 2025
9 tasks
Co-authored-by: Steve Myers <github@notmandatory.org>
@tnull

tnull commented Oct 31, 2025

Copy link
Copy Markdown
ContributorAuthor

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Yes, if you don't mind feel free to push a test case. I'm generally happy to do it, but given it will be the first one for apply_block API in general, you will have much more context to preset some test approach/design.

Also did minor cleanup of apply_update_events tests.
@notmandatory

notmandatory commented Nov 1, 2025

Copy link
Copy Markdown
Member

I added a few tests for apply_block_events based on the relevant (non-mempool related) tests I made for apply_update_events. I think these are the only ones needed for applying on-chain blocks, but feel free to modify these or add more.

@ValuedMammal
ValuedMammal changed the base branch from release/2.3 to release/2.xNovember 2, 2025 00:10
@ValuedMammal

Copy link
Copy Markdown
Contributor

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

That's a good suggestion.

@ValuedMammalValuedMammal moved this from In Progress to Needs Review in BDK WalletNov 4, 2025

@ValuedMammalValuedMammal left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(self) ACK e9a3034

@notmandatory
notmandatory merged commit abc9cd8 into bitcoindevkit:release/2.xNov 5, 2025
20 checks passed
@github-project-automationgithub-project-automationBot moved this from Needs Review to Done in BDK WalletNov 5, 2025
@ValuedMammalValuedMammal mentioned this pull request Nov 5, 2025
3 tasks
ValuedMammal added a commit that referenced this pull request Feb 6, 2026
…0 milestone)
fcdc006 docs: Add ADR `0003_events.md` (Steve Myers)
acbfb67 test: Add `tests/wallet_events.rs` (Steve Myers)
ec3d1e0 feat(wallet): Add `Wallet::apply_update_events` (Steve Myers)
6467969 feat(wallet): Introduce `WalletEvent` (Steve Myers)
132d4b6 docs: Fix typo (Steve Myers)
Pull request description:
### Description
Cherry-pick of commits from #310 and #336.
### Notes to the reviewers
See #319 (comment) for proposed follow-up work.
### Changelog notice
No changes from `release/2.x` branch.
BREAKING:
- `wallet::event` module is made private. `WalletEvent` can now be imported from the root level.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `just p` before pushing
#### New Features:
* [x] I've added tests for the new feature
* [x] I've added docs for the new feature
* [x] This pull request breaks the existing API
Top commit has no ACKs.
Tree-SHA512: bbe0c48175543413a75b4dc7b5e3a59dd0186aadab08dc8af8f14dcb4a90444bcfece1c3f6fc8474949b98a0e925ad91ef30aae53fefefdcbff55cbb09d64ea1
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new featureNew feature or request

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@tnull@coveralls@notmandatory@ValuedMammal@Camillarhi
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Add `apply_block_events` and `apply_block_connected_to_events` by tnull · Pull Request #336 · bitcoindevkit/bdk_wallet · GitHub
Skip to content

Add apply_block_events and apply_block_connected_to_events - #336

Merged
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events
Nov 5, 2025
Merged

Add apply_block_events and apply_block_connected_to_events#336
notmandatory merged 3 commits into
bitcoindevkit:release/2.xfrom
tnull:2025-10-add-apply-block-events

Conversation

@tnull

Copy link
Copy Markdown
Contributor

Description

Previously, we added a new Wallet::apply_update_events method that returned WalletEvents. Unfortunately, no corresponding APIs were added for the apply_block counterparts. Here we fix this omission.

Notes to the reviewers

I opened this towards the release-2.2 branch, but it would probably need another release branch. Or let me know if you prefer to open it against master (which seems to be lacking apply_update_events currently though).

I also added no test coverage given that none seems to exist for Wallet::apply_block in the first place. Let me know if I should add something here.

Checklists

All Submissions:

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature

cc @notmandatory

@coveralls

coveralls commented Oct 29, 2025

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 18988009424

Details

  • 34 of 69(49.28%) changed or added relevant lines in 1 file are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage increased (+0.03%) to 85.079%

Changes Missing CoverageCovered LinesChanged/Added Lines%
wallet/src/wallet/mod.rs346949.28%
TotalsCoverage Status
Change from base Build 18951786142:0.03%
Covered Lines:7059
Relevant Lines:8297

💛 - Coveralls

@ValuedMammalValuedMammal moved this to In Progress in BDK WalletOct 29, 2025
@ValuedMammalValuedMammal added this to the Wallet 3.0.0 milestone Oct 29, 2025
@ValuedMammalValuedMammal added the new feature New feature or request label Oct 29, 2025
Comment threadwallet/src/wallet/mod.rs Outdated
block: &Block,
height: u32,
) -> Result<Vec<WalletEvent>, CannotConnectError> {
let connected_to = match height.checked_sub(1) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this. I noticed apply_block_events seems to duplicate logic from apply_block. Could we move the event handling from apply_block_connected_to_events into apply_block_events, then have it call apply_block instead of apply_block_connected_to? Would be more consistent with how apply_update_event works and avoid the duplication.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I intentionally added variants for apply_block as well as for apply_block_connected_to as we may also want to use apply_block_connected_to_events at some point.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could have apply_block call the new apply_block_events and map the return value to ().

Hmm, but that would run the (possibly costly) delta calculation for everybody, even if they wouldn't make use of the events. I believe this is why @notmandatory added separate _event variants of the methods in the first place.

@notmandatorynotmandatoryOct 30, 2025

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In #319 (in v3.0) my plan is to always return events. But for this PR I agree it's best keep the two paths separate so events are only calculated on the _events functions.

@notmandatorynotmandatory mentioned this pull request Oct 29, 2025
3 tasks
@notmandatory

Copy link
Copy Markdown
Member

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Previously, we added a new `Wallet::apply_update_events` method that
returned `WalletEvent`s. Unfortunately, no corresponding APIs were added
for the `apply_block` counterparts. Here we fix this omission.
@tnull
tnullforce-pushed the 2025-10-add-apply-block-events branch from 3039c1b to df444d0CompareOctober 30, 2025 09:37
@tnull

tnull commented Oct 30, 2025

Copy link
Copy Markdown
ContributorAuthor

PR needs a rebase on the release/2.2 branch to fix the CI issue, see #338.

Rebased on release/2.2, but still wondering if we'd need a release/2.3 branch for this, given it extends API?

@ValuedMammal
ValuedMammal changed the base branch from release/2.2 to release/2.3October 30, 2025 18:52
@ValuedMammal

Copy link
Copy Markdown
Contributor

ACK I changed the PR to target release/2.3. I agree having a unit test would be nice. I assume we'll need a similar update to #319 .

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this. Other than my suggested change to apply_wallet_events() it looks good to me.

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Comment threadwallet/src/wallet/mod.rs Outdated
@notmandatory

notmandatory commented Oct 30, 2025

Copy link
Copy Markdown
Member

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

@thunderbiscuitthunderbiscuit mentioned this pull request Oct 30, 2025
9 tasks
Co-authored-by: Steve Myers <github@notmandatory.org>
@tnull

tnull commented Oct 31, 2025

Copy link
Copy Markdown
ContributorAuthor

I would like to see some tests. If you don't have time to do them I'm happy to push a commit with similar testing as I did for apply_update_events().

Yes, if you don't mind feel free to push a test case. I'm generally happy to do it, but given it will be the first one for apply_block API in general, you will have much more context to preset some test approach/design.

Also did minor cleanup of apply_update_events tests.
@notmandatory

notmandatory commented Nov 1, 2025

Copy link
Copy Markdown
Member

I added a few tests for apply_block_events based on the relevant (non-mempool related) tests I made for apply_update_events. I think these are the only ones needed for applying on-chain blocks, but feel free to modify these or add more.

@ValuedMammal
ValuedMammal changed the base branch from release/2.3 to release/2.xNovember 2, 2025 00:10
@ValuedMammal

Copy link
Copy Markdown
Contributor

For the branching question. I'd prefer to have a release/2.x branch that contains a tag for each published release. I don't think we'll need branches to do bug fixes separately for 2.1,2.2 etc.

That's a good suggestion.

@ValuedMammalValuedMammal moved this from In Progress to Needs Review in BDK WalletNov 4, 2025

@ValuedMammalValuedMammal left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@notmandatorynotmandatory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(self) ACK e9a3034

@notmandatory
notmandatory merged commit abc9cd8 into bitcoindevkit:release/2.xNov 5, 2025
20 checks passed
@github-project-automationgithub-project-automationBot moved this from Needs Review to Done in BDK WalletNov 5, 2025
@ValuedMammalValuedMammal mentioned this pull request Nov 5, 2025
3 tasks
ValuedMammal added a commit that referenced this pull request Feb 6, 2026
…0 milestone)
fcdc006 docs: Add ADR `0003_events.md` (Steve Myers)
acbfb67 test: Add `tests/wallet_events.rs` (Steve Myers)
ec3d1e0 feat(wallet): Add `Wallet::apply_update_events` (Steve Myers)
6467969 feat(wallet): Introduce `WalletEvent` (Steve Myers)
132d4b6 docs: Fix typo (Steve Myers)
Pull request description:
### Description
Cherry-pick of commits from #310 and #336.
### Notes to the reviewers
See #319 (comment) for proposed follow-up work.
### Changelog notice
No changes from `release/2.x` branch.
BREAKING:
- `wallet::event` module is made private. `WalletEvent` can now be imported from the root level.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `just p` before pushing
#### New Features:
* [x] I've added tests for the new feature
* [x] I've added docs for the new feature
* [x] This pull request breaks the existing API
Top commit has no ACKs.
Tree-SHA512: bbe0c48175543413a75b4dc7b5e3a59dd0186aadab08dc8af8f14dcb4a90444bcfece1c3f6fc8474949b98a0e925ad91ef30aae53fefefdcbff55cbb09d64ea1
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new featureNew feature or request

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants

@tnull@coveralls@notmandatory@ValuedMammal@Camillarhi