Skip to content

Fix sequence preservation#4195

Open
kajoseph wants to merge 3 commits into
bitpay:masterfrom
kajoseph:fixSequencePreservation
Open

Fix sequence preservation#4195
kajoseph wants to merge 3 commits into
bitpay:masterfrom
kajoseph:fixSequencePreservation

Conversation

@kajoseph

@kajoseph kajoseph commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

Description

Trying to associateInputs after the sequence number has been changed from the default (e.g. enableRBF() is called) will result in the sequence number on the inputs being reset to the default, which will cause downstream issues when applying signatures and/or verifying transaction proposals.

Changelog

  • Lints the transaction.js files for each lib - necessary for the precommits to pass.
  • In a separate commit (cebe0c6), applies the sequence preservation logic

Testing Notes

I ran across this issue by creating a DOGE tx proposal with rbf enabled. I then got a BAD_SIGNATURES error when signing the txp.


Checklist

  • I have read CONTRIBUTING.md and verified that this PR follows the guidelines and requirements outlined in it.

@kajoseph kajoseph added bitcore-lib This pull request modifies the bitcore-lib package bitcore-lib-cash This pull request modifies the bitcore-lib-cash package bitcore-lib-ltc This pull request modifies the bitcore-lib-ltc package bitcore-lib-doge This pull request modifies the bitcore-lib-doge package labels Jul 9, 2026
@kajoseph kajoseph requested a review from Copilot July 9, 2026 19:07

Copilot AI 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.

Pull request overview

Fixes a transaction input sequencing regression where calling associateInputs() after changing input sequence numbers (e.g. via enableRBF()) could reset sequences back to defaults, leading to downstream signature/verification failures.

Changes:

  • Preserve existing sequenceNumber when associateInputs() replaces an input with one reconstructed from a UTXO.
  • Refactor transaction.js loops/vars across libs to satisfy current lint rules (e.g., replace forEach with for...of).
  • Update ESLint config for CommonJS package JS files (reduce friction with require usage and bitwise ops).

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
packages/bitcore-lib/lib/transaction/transaction.js Lint-driven refactors (loop style, minor cleanups) in core transaction implementation.
packages/bitcore-lib-ltc/lib/transaction/transaction.js Apply sequence preservation in associateInputs() plus lint updates.
packages/bitcore-lib-doge/lib/transaction/transaction.js Apply sequence preservation in associateInputs() plus lint updates (one lint-breaking semicolon remains).
packages/bitcore-lib-cash/lib/transaction/transaction.js Apply sequence preservation in associateInputs() plus lint updates.
eslint.config.mjs Adjust rules for CommonJS JS sources (warn on require-imports, disable no-bitwise for those packages).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/bitcore-lib-doge/lib/transaction/transaction.js Outdated
Comment thread packages/bitcore-lib-ltc/lib/transaction/transaction.js
Comment thread packages/bitcore-lib-doge/lib/transaction/transaction.js
Comment thread packages/bitcore-lib-cash/lib/transaction/transaction.js
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bitcore-lib This pull request modifies the bitcore-lib package bitcore-lib-cash This pull request modifies the bitcore-lib-cash package bitcore-lib-doge This pull request modifies the bitcore-lib-doge package bitcore-lib-ltc This pull request modifies the bitcore-lib-ltc package

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants